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

Did*_* A. 4 jvm graalvm substratevm graalvm-native-image

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

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

Ole*_*jev 5

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

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

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