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

Why does a GraalVM (SubstrateVM) native image uses so much less memory at runtime than a corresponding JIT build?

我想知道为什么 Java 应用程序的 GraalVM (SubstrateVM) 本机映像使其成为 运行 运行time 行为将消耗更少的内存,但是如果 运行 正常情况下会比较耗内存吗?

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

GraalVM 本机映像不包括 JIT 编译器或相关基础设施——因此无需为 JIT 分配内存,程序的内部表示 JIT(例如控制流图),无需存储一些 class 元数据等

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

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