graalvm

本文最后更新于:2023年4月11日 下午

官网:https://www.graalvm.org

GitHub:https://github.com/oracle/graal/

安装

GraalVM分为一个单独的基于OpenJDK的环境,和各个组件。在安装了GraalVM后,还要使用它提供的gu命令来安装组件。

GraalVM

  • Windows

官网或从GitHub下载均可。

  • Linux

从各大发行商应用仓库下载即可,以ArchLinux为例,从AUR下载:

1
paru -S jdk17-graalvm-bin

组件

GraalVM提供了gu命令来管理各个组件。在只安装了GraalVM后,只有一个graalvm组件。

可以用gu list来查看以安装的组件。

如果要查看当前的GraalVM支持那些组件,可以用gu available命令。

使用gu install 要安装的组件命令来安装组件。

比如,我们用之构建原生的可执行文件,只安装native-imagellvm-toolchain即可:

1
2
gu install native-image
gu install llvm-toolchain

使用

使用GraalVM提供的native-image来构建原生的可执行文件。它可以根据单独的类、jar或是jdk9的模块来构建。本文只介绍前两种。

它的用法是:

1
native-image [options] [-cp/-classpath <class search path of directories and zip/jar files>] class [imagename] [options]

单独的类

PS:此种只适合写一个Hello World测试,真实用的话,还是要用下面的基于jar来构建的方法。

首先,准备好我们的Hello World,一个叫Hello.java的文件,内容如下:

1
2
3
4
5
6
public class Hello {

public static void main(String[] args) {
System.out.println("Hello World!");
}
}

然后,编译并运行此类:

1
2
3
4
# 编译此类,生成Hello.class
javac Hello.java
# 运行
java Hello

有了Hello.class,我们就可以使用native-image来邮件原生的可执行程序了:

1
native-image Hello hello

生成的文件有两个:hellohello.build_artifacts.txt。其中,hello即是我们的最终产物,大小大约为12M。

PS:构建大概需要几分钟的时间,并要求电脑至少配有5G的内存。如果你的HelloWorld需要网络连接的话,要在构建命令中加上 –enable-http和–enable-https的选项。加上此选项后,最终可执行文件的大小可能会突破40M。

一个或多个jar

分析:

1
java -agentlib:native-image-agent=config-output-dir=./META-INF/native-image -cp $CP MainClass

构建:

1
2
3
native-image --allow-incomplete-classpath -H:+ReportExceptionStackTraces -H:EnableURLProtocols=http,https --no-fallback -cp $CP  MainClass imagename
# --report-unsupported-elements-at-runtime
# --enable-url-protocols=css

graalvm
https://jiangyc.gitlab.io/4df24ba0-ea0a-11ec-9d22-b5e45f72a443/
作者
佳木流泉
发布于
2022年6月12日
许可协议