我想知道为什么 Java 应用程序的 GraalVM (SubstrateVM) 本机映像使它运行在运行时行为将消耗更少内存的地方,但如果正常运行,它将消耗更多内存?
为什么不能让正常的 JIT 同样消耗少量的内存呢?
我想知道为什么 Java 应用程序的 GraalVM (SubstrateVM) 本机映像使它运行在运行时行为将消耗更少内存的地方,但如果正常运行,它将消耗更多内存?
为什么不能让正常的 JIT 同样消耗少量的内存呢?
GraalVM 原生镜像不包括 JIT 编译器或相关的基础设施——因此不需要为 JIT 分配内存,也不需要为 JIT 程序的内部表示(例如控制流图)分配内存,不需要存储一些类元数据等
因此,实际上执行有用工作的 JIT 不太可能以相同的零开销实现。
可以创建一个经济的虚拟机实现,它可能使用比 HotSpot 更少的内存。特别是如果您只想测量默认配置而不比较您控制 JVM 允许使用的内存量的设置。然而,人们需要意识到,这要么是对现有实现的增量改进,要么会选择一种不同的选择来进行权衡,因为现有的 JVM 实现实际上非常非常好。