Java 堆中空间/代数之间的比率是否恒定?
我已经阅读了这篇关于虚拟机垃圾回收调优的文章,以更好地了解java垃圾回收器。每个空间都有一个虚拟堆空间区域,随着所需堆空间越来越接近最大堆大小,它可以增长到该区域。这可以从这张照片中看到:
(来源:oracle.com)
您可以使用 NewRatio 参数设置年轻一代和老一代(终身制)之间的比率,并使用 SurvivorRatio 参数设置伊甸园空间和幸存者空间之间的比率。
最近,有人问这个问题,关于找出堆空间的默认比率。它说你应该使用PrintGCDetails参数并手动计算比率。
我的问题是:不同堆空间的大小是否以相同的比率增加,从而在应用程序的整个运行时保持它们在启动时设置的比率恒定?例如,如果年轻一代和老/终身一代的默认 NewRatio 为 3,并且初始保留堆空间对于年轻一代为 100MB,对于旧代为 300MB。如果需要为旧空间保留更多内存,假设再增加300MB,使其总共为600MB。为Young Space保留的内存是否也翻了一番,达到200MB,保持比率不变?