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