2

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

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

4

1 回答 1

2

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

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

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

于 2020-04-06T14:52:58.353 回答