何时以及为什么原生图像需要 SubstrateVM 框架?

When and why is the SubstrateVM Framwork Required for a Native Image?

我了解了 GraalVM and the SubstrateVM 框架。我知道 native-image 命令可用于从 Java 源文件创建本机应用程序,如下所示:

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

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

...other things (runtime) needed to actually run ahead-of-time compiled Java bytecode without a JVM.

我不清楚:

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

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

这意味着在构建时和 运行 时需要 Substrate VM。这也意味着二进制文件中没有任何字节码,也没有 "fully-fledged virtual machine embedded".