2

我阅读了有关GraalVMSubstrateVM框架的信息。我了解该native-image命令可用于从 Java 源文件创建本机应用程序,如下所示:

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

这将创建一个本机二进制文件hello,根据这个问题,它由 SubstrateVM 框架提供支持,该框架提供......

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

我不清楚:

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

1 回答 1

1

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

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

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

于 2020-01-13T08:56:16.513 回答