jvm - 为什么 GraalVM (SubstrateVM) native 图像在运行时使用的内存比相应的 JIT 构建少得多?

标签 jvm graalvm graalvm-native-image substratevm

我想知道为什么 Java 应用程序的 GraalVM (SubstrateVM) native 镜像使其运行时运行时行为会消耗更少的内存,但如果正常运行,它会消耗更多的内存?

为什么普通的 JIT 不能同样消耗少量内存?

最佳答案

GraalVM native 图像不包括 JIT 编译器或相关的基础设施——因此不需要为 JIT 分配内存,对于程序的内部表示 JIT 它(例如控制流图),不需要存储一些类元数据等。

因此,实际执行有用工作的 JIT 不太可能以相同的零开销实现。

创建一个经济的虚拟机实现是可能的,它可能使用比 HotSpot 更少的内存。特别是如果您只想测量默认配置而不比较您控制 JVM 允许使用的内存量的设置。然而,人们需要意识到,它要么是对现有实现的增量改进,要么是选择不同的选项进行某种权衡,因为现有的 JVM 实现实际上非常非常好。

关于jvm - 为什么 GraalVM (SubstrateVM) native 图像在运行时使用的内存比相应的 JIT 构建少得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61052602/

相关文章:

java - 基于 Java 的视频播放器是否足够快?

java - JVM 程序 : class files and internalization, 和执行状态的理论方面

graalvm - 如何设置 GraalVM 原生镜像的堆大小?

native 编译中不使用 Quarkus 配置文件感知配置

JAVA - Class 类和 *.class 文件之间的区别?

java - 在服务器 JRE 和 JRE 中运行我的应用程序的主要区别是什么?

java - GraalVM native-image -H :ConfigurationFileDirectories files 文档

java - 如何让 Graal SDK 包在没有 Maven 的情况下工作?

javafx - 使用 Quarkus 或 Springboot 和 JavaFx 进行 native 可执行文件