什么时候以及为什么本地映像需要SubstrateVM框架?

时间:2020-01-12 13:04:38

标签: java graalvm graalvm-native-image substratevm

我了解了GraalVMSubstrateVM框架。我了解native-image命令可用于从Java源文件创建本地应用程序,如下所示:

$ javac Hello.java
$ native-image --no-server --no-fallback Hello
$ ./hello
Hello World!
$

这将创建一个本地二进制文件hello,根据question,它是由SubstrateVM框架提供动力的,该框架提供了...

...其他东西(运行时)需要在没有JVM的情况下实际运行提前编译的Java字节码。

我不清楚:

  • 何时以及为什么需要SubstrateVM框架?是否仅在本机构建时或运行时需要? hello二进制文件是由纯目标机器字节码组成还是还是Java字节码和成熟的嵌入式虚拟机(即SubstrateVM)组成?
  • 与普通的hello C程序相比,运行Hello World!本机映像需要哪些开销?

1 个答案:

答案 0 :(得分:1)

垃圾收集器是了解正在发生的事情的一个很好的例子。

JVM有一个,因此您不必手动管理内存。但是,当您构建本机映像时,您的Java代码中没有一个映像对吗?因此,本机映像工具将SubstrateVM垃圾收集器与您的应用程序捆绑在一起,以便生成的二进制文件可以收集自己的垃圾,而您不必这样做。

这意味着在构建时和运行时都需要Substrate VM。这也意味着二进制文件中没有任何字节码,也没有“完整的嵌入式虚拟机”。