如何判断 Java 程序是否在 GraalVM AOT 上下文中运行?

tks*_*sfz 5 graalvm

我有一个小 Java 程序。我使用 Graal 构建了一个二进制文件native-image(即 GraalVM AOT 又名 SubstrateVM)。

我的程序可以使用 Java 运行时或本地映像二进制文件执行。判断我正在运行的上下文的最佳方法是什么?

(一般来说,这可能是一种不好的做法,但我相信在某些并不少见的情况下这是不可避免的/必要的。)

Gil*_* D. 5

编辑:现在有一个 API 可以实现这一点。参见网友7983712的回答。

在 GraalVM 中完成此操作的方式是捕获系统属性:在构建 AOT 映像时com.oracle.graalvm.isaot将其设置为。true如果将其与静态初始化程序在图像生成期间运行的事实结合起来,您可以使用

static final boolean IS_AOT = Boolean.getBoolean("com.oracle.graalvm.isaot")
Run Code Online (Sandbox Code Playgroud)

运行本机映像时,此布尔值将保持为 true。

这对于切断最终输出中不需要的路径也很有用:例如,如果您有一些代码使用了 SVM 不支持的功能(例如动态类加载),您可以使用!IS_AOT


小智 4

GraalVM 现在提供了一个用于检查 AOT 上下文的API :

ImageInfo.inImageCode()
ImageInfo.inImageRuntimeCode()
ImageInfo.inImageBuildtimeCode()
ImageInfo.isExecutable()
ImageInfo.isSharedLibrary()
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

579 次

最近记录:

6 年,10 月 前