我正在学习GraalVM和AOT,我正在阅读spec for AOT,然后我感到困惑,如果AOT将我的代码编译为机器码(本机),为什么我需要JVM?
为什么我需要这个:
java -XX:AOTLibrary=./libHelloWorld.so HelloWorld
我正在学习GraalVM和AOT,我正在阅读spec for AOT,然后我感到困惑,如果AOT将我的代码编译为机器码(本机),为什么我需要JVM?
为什么我需要这个:
java -XX:AOTLibrary=./libHelloWorld.so HelloWorld
1条答案
按热度按时间m528fe3b1#
你仍然需要JVM,因为你只编译了一小部分,例如“你的HelloWorld”为本地代码。你仍然需要很多JVM来运行你的程序。例如Java标准库(你还没有编译为本地代码),类加载,程序入口点的检测(找到你的主方法),以及垃圾收集。所有这些都是由JVM提供的。
简而言之,你只是将一个库(程序的一小部分)编译成本机代码,而不是将整个程序编译成本机代码。
这也由summary of JEP295声明:
摘要
在启动虚拟机之前,将Java类编译为本机代码。
我认为你实际上想要做的,是对你的程序进行compile a native image处理,这将包括所有的含义,比如从JVM到可执行文件的垃圾收集。