我想知道为什么 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/