如何设置jvm各分代的大小?
1.吞吐量、延迟、内存占用这三个指标可以任意选择两个来作为调优目的,这是'GC调优的3选2原则'.
2.关注吞吐量和延迟的应用应该把-Xms和-Xmx设定为同一值.因为拓展和缩减新生代或老年代空间都需要Full GC, 这会降低程序的吞吐量和增加延迟.
3. 堆(老年代)的活跃数据大小: 老年代稳定占用的空间大小, 可以通过GC日志估算, 最好在程序出于稳定运行后, 多次Full GC后再查看, 可手动使用 jmap -histo:live pid 来触发Full GC.
4.初始堆的大小设计法则:
-Xms和-Xmx设置为老年代活跃数据大小的3~4倍;
-Xmn新生代空间大小为老年代活跃数据大小的1~1.5倍; 老年代为老年代活跃数据大小的2~3倍;
Eden与Survivor的比例则是根据Survivor稳定后总的存活大小与Survivor利用率来计算, 默认利用率为50%(可设置), 所以Survivor大小至少为Survivor总的存活大小的两倍.调整Survivor大小时要注意保持Eden大小不变。
5. 如果程序能忍受的停顿时间比在收集过程中观测的值更长, 想降低gc频率, 可以适当增大新生代空间(注意要保证老年代空间不变); 反之亦然;
网友评论