我有一个小 Java 程序。我使用 Graal 构建了一个二进制文件native-image
(即 GraalVM AOT 又名 SubstrateVM)。
我的程序可以使用 Java 运行时或本地映像二进制文件执行。判断我正在运行的上下文的最佳方法是什么?
(一般来说,这可能是一种不好的做法,但我相信在某些并不少见的情况下这是不可避免的/必要的。)
编辑:现在有一个 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 次 |
最近记录: |