Full GC排查
YGC触发:
- Eden区没有足够的空间
对象进入老年代的情况:
- YGC时,幸存者区没有足够的空间存放存活的对象, 对象会进入老年代
- 经过经过多次YGC后,如果存活对象的年龄达到了设定阈值,则会晋升到老年代中。
- 大对象直接进入老年代
- 动态年龄判定规则,To Survivor区中相同年龄的对象,如果其大小之和占到了 To Survivor区一半以上的空间,那么大于此年龄的对象会直接进入老年代,而不需要达到默认的分代年龄。
Full GC触发:
- 老年代的内存使用率达到了一定的阈值
- 空间分配担保:在YGC之前,会先检查老年代可用的剩余空间是否大于新生代所有对象占用内存之和,如果小于,则会检查是否设置了允许担保失败,如果不允许,直接触发Full GC;如果允许,则会检查老年代可用空间是否大于历次进入老年代的对象平均大小,如果小于, 则触发Full GC
- 元空间空间不足时或达到阈值上限时
- System.gc() 或者Runtime.gc() 被显式调用时,触发FGC。
