Full GC的触发条件
(1)直接调用 System.gc() 时(调用后并不会立即发生 FGC,后面会在某个时间点发生),操作系统建议执行 Full GC( -XX:+DisableExplicitGC 可禁用 ),但是不必然执行;
(2)老年代的可用空间不足时;
(3)方法区空间不足时,或 Metaspace Space 使用达到 MetaspaceSize 但未达到 MaxMetaspaceSize 阈值;大多情况下扩容都会触发;
(4)concurrent mode failure ;
(5)通过Minor GC后进入老年代的平均大小大于老年代的可用内存时。由 Eden 区、From Survior 区向 To Survior 区复制时,对象大小大于 To Survior 区可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小时;( Promotion failed )
(6)执行 jmap -histo:live 或者 jmap -dump:live;
注:一般 Full GC 会伴随一次 Minor GC。