何时以及为什么原生图像需要 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.
我不清楚:
- 何时以及为何需要 SubstrateVM 框架?是仅在本机构建时需要还是在 运行 期间也需要?
hello
二进制文件是由纯目标机器字节码组成,还是仍然有 Java 字节码和嵌入的成熟虚拟机,即 SubstrateVM?
- 与通常的
Hello World!
C 程序相比,哪些开销需要 hello
本机映像 运行?
了解正在发生的事情的一个很好的例子是垃圾收集器。
JVM 有一个,因此您不必手动管理内存。但是当你构建一个本地图像时,你的 java 代码中没有一个,对吧?因此,本机图像工具将 SubstrateVM 垃圾收集器与您的应用程序捆绑在一起,以便生成的二进制文件可以收集它自己的垃圾,而您不必这样做。
这意味着在构建时和 运行 时需要 Substrate VM。这也意味着二进制文件中没有任何字节码,也没有 "fully-fledged virtual machine embedded".
我了解了 GraalVM and the SubstrateVM 框架。我知道 native-image
命令可用于从 Java 源文件创建本机应用程序,如下所示:
$ javac Hello.java
$ native-image --no-server --no-fallback Hello
$ ./hello
Hello World!
$
这将创建一个本机二进制文件 hello
,根据此
...other things (runtime) needed to actually run ahead-of-time compiled Java bytecode without a JVM.
我不清楚:
- 何时以及为何需要 SubstrateVM 框架?是仅在本机构建时需要还是在 运行 期间也需要?
hello
二进制文件是由纯目标机器字节码组成,还是仍然有 Java 字节码和嵌入的成熟虚拟机,即 SubstrateVM? - 与通常的
Hello World!
C 程序相比,哪些开销需要hello
本机映像 运行?
了解正在发生的事情的一个很好的例子是垃圾收集器。
JVM 有一个,因此您不必手动管理内存。但是当你构建一个本地图像时,你的 java 代码中没有一个,对吧?因此,本机图像工具将 SubstrateVM 垃圾收集器与您的应用程序捆绑在一起,以便生成的二进制文件可以收集它自己的垃圾,而您不必这样做。
这意味着在构建时和 运行 时需要 Substrate VM。这也意味着二进制文件中没有任何字节码,也没有 "fully-fledged virtual machine embedded".