我了解了GraalVM和SubstrateVM框架。我了解native-image
命令可用于从Java源文件创建本地应用程序,如下所示:
$ javac Hello.java
$ native-image --no-server --no-fallback Hello
$ ./hello
Hello World!
$
这将创建一个本地二进制文件hello
,根据question,它是由SubstrateVM框架提供动力的,该框架提供了...
...其他东西(运行时)需要在没有JVM的情况下实际运行提前编译的Java字节码。
我不清楚:
hello
二进制文件是由纯目标机器字节码组成还是还是Java字节码和成熟的嵌入式虚拟机(即SubstrateVM)组成?hello
C程序相比,运行Hello World!
本机映像需要哪些开销?答案 0 :(得分:1)
垃圾收集器是了解正在发生的事情的一个很好的例子。
JVM有一个,因此您不必手动管理内存。但是,当您构建本机映像时,您的Java代码中没有一个映像对吗?因此,本机映像工具将SubstrateVM垃圾收集器与您的应用程序捆绑在一起,以便生成的二进制文件可以收集自己的垃圾,而您不必这样做。
这意味着在构建时和运行时都需要Substrate VM。这也意味着二进制文件中没有任何字节码,也没有“完整的嵌入式虚拟机”。