GraalVM 提供了一个名为 “Native Image” 的工具,它能够将 Java 应用程序预编译成本机可执行文件。这种方法的优点是启动速度快,内存占用少,因为程序运行时不需要 JVM 和类加载。
然而这种方式也存在一些弊端,如预编译的 GraalVM Native Image 相比于在 HotSpot JVM 上运行的相同程序,它没有一个先进的即时编译器 (JIT) ,因此就不能在运行时分析和优化代码,无法利用这些运行时优化,因此在性能表现上可能会有所降低。
本文接下来将教你如何使用 GraalVM 编译 SpringBoot 程序。
文章目录:
- 本机(或虚拟机)上安装 GraalVM JDK17
- 安装一些编译工具
- 编译 SpringBoot 程序
一、本机(或虚拟机)上安装 GraalVM JDK17
注意:本机(或虚拟机)的 CPU 必须具有 2 核心以上,运行内存 4GB 的硬性条件。否则在后面的编译过程中,很有可能会因为内存不足而触发编译失败。
访问 GraalVm for GitHub 链接,下载你需要的 JDK:https://github.com/graalvm/graalvm-ce-builds/releases/。这里因为我本机是 MacOS 系统,且 CPU 是 ARM 架构的,所以我选择下载macOS (aarch64) † JDK17(大家依据自己实际情况进行下载即可):
下载完毕之后,安装 JDK。这里由于篇幅关系,我不对安装 JDK 作过多介绍,简单来说就是解压文件、配置 JAVA_HOME 与 PATH 路径。
安装完 GraalVm JDK 之后,我们应该能在命令行上直接运行指令 java -version
。此外,还能运行命令 gu list
,如果你这两项都没问题,那么安装成功。
gu
是 GraalVM 的组件安装器 (GraalVM Updater),你可以使用gu
来安装、列出和卸载 GraalVM 中的各种组件。
二、安装一些编译工具
-
安装
native-image
native-image
是 GraalVM 提供的一个工具,它可以将 Java 应用程序预编译为本机可执行文件,这样生成的文件可以直接运行,无需 JVM 或者任何其他的运行时环境。在这里,我们需要借助
gu
来安装native-image
,具体如下:友情提示:需要访问外网
gu install native-image
-
安装
gcc
、glibc-devel
与zlib-devel
如果你是 MacOS 系统,请运行:
brew install gcc zlib
如果你是 CentOS 系统,请运行:
yum install -y gcc glibc-devel zlib-devel
如果你是 Ubuntu 系统,请运行:
sudo apt install gcc libc6-dev zlib1g-dev
三、编译 SpringBoot 程序
上面两步全部运行成功之后,我们随意选择一个 Spring Boot 项目(必须是 SpringBoot 3.0 版本以上 + JDK17),比如我这里新建了一个 hello_graalvm
项目。进入项目主目录,命令行执行 mvn -Pnative native:compile
,等待 5~10 分钟,程序会自动在 /target
目录下生成一个本机可直接执行的文件,直接就能运行,教程结束。
cd hello_graalvm
mvn -Pnative native:compile
# 运行新生成的可执行程序
./hello_graalvm