GraalVM Native Image是一种提前 (AOT) 编译技术,可将 Java 字节码打包为独立的可执行文件。这个可执行文件是一个本地应用程序,就像用户系统上的任何其他应用程序一样,它不再需要单独安装Java虚拟机,有更快的启动时间,占用的内存空间也更小。
有两个 GraalVM 版本可供选择:社区版和企业版。社区是开源免费的,企业版则提供更好的性能、可扩展性和安全性以及来自Oracle的技术支持。就类似于OpenJDK和Oracle JDK的关系和区别。
下载链接:GraalVM 官网 - Oracle 企业版 - GitHub 社区版 - Docker Container
GraalVM环境配置
下载合适的版本,我这里选择的是Windows平台,JDK17,GraalVM Community Edition 22.3.0。
下载解压后,将 {graalvm_home}/bin 路径加入PATH环境变量。
测试环境是否配置成功:
gu list
D:\download>gu list
ComponentId Version Component name Stability Origin
---------------------------------------------------------------------------------------------------------------------------------
graalvm 22.3.0 GraalVM Core Supported
安装native-image:
gu install native-image
如果提示网络超时,连接不上,可以先去github下载,然后离线安装。
使用以下命令离线安装:
gu install --file 文件路径
D:\download>gu install --file native-image-installable-svm-java17-windows-amd64-22.3.0.jar
Processing Component archive: native-image-installable-svm-java17-windows-amd64-22.3.0.jar
Installing new component: Native Image (org.graalvm.native-image, version 22.3.0)
查看已经安装的组件:
gu list
D:\download>gu list
ComponentId Version Component name Stability Origin
---------------------------------------------------------------------------------------------------------------------------------
graalvm 22.3.0 GraalVM Core Supported
native-image 22.3.0 Native Image Early adopter
安装 Visual Studio 构建工具
下载后双击安装,进入【已安装】选项卡,点击【修改】按钮
在弹出框中选择【工作负荷】-> 【使用C++的桌面开发】,然后按下图勾选相应的组件即可。
使用下面命令设置环境后,就可以使用native-image命令编译本地执行文件了:
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat
D:\tmp>"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.11.22
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
或者直接从Visual Studio 2019启动开发命令提示符:
但这两种方式都不喜欢,因为我习惯用winows 终端来运行命令。所以我打开native-image.cmd往里添加了一行代码:
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
这样就可以随便使用native-image命令了。
编译Java代码为原生应用
打开记事本,编写HelloWorld.java,内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, GraalVM Native Image!");
}
}
编译字节码:
javac HelloWorld.java
编译本地执行:
native-image HelloWorld
编译完成后,当前目录下会生成helloworld.exe文件。