背景:因为MaxTenuringThreshold设置不合理,导致年轻代的对象很快进入年老代,导致年老代FGC频率增加,进而影响系统性能。
线上某服务一直存在FGC比较严重的情况,排查下来是MaxTenuringThreshold=3.
当一个对象在新生代中经历过Minor GC之后对象的年龄就+1,原来0岁此时就变为1了,当再经历一次回收之后依然没有被回收则年龄就变为2,而我们给这参数设置的最大参数为3,假如对象的年龄变为4超些我们设置的最大的这个3时,该对象就会从新生代晋升到老年代当中。
.看Oracle官方的说明:
Do Not Set -XX:MaxTenuringThreshold to a Value Greater Than 15
Last updated on APRIL 18, 2021
APPLIES TO:
Java SE JDK and JRE - Version 1.5.0 and later
Information in this document applies to any platform.