Full GC 将对年轻代、老年代以及元空间、堆外内存进行垃圾进行回收.
触发Full GC原因如下:
1、当年轻代晋升到老年代的对象大小比较目前老年代剩余的空间大小还要大时,此时会触发Full GC
2、当老年化的空间使用率超过某阀值的时,此时会触发Full GC
3、当元空间不足时(JDK1.7永久代不足时),此时会触发Full GC
4、当调用System.gc(),JVM也会按排一次Full GC
“Concurrent Mode Failure” 失败会导另一外Full GC (原因是:大量新对象生成\年轻代空间较小)
CMS垃圾收集器特有的错误,CMS的垃圾清理和引用线程是并行进行的,如果在并行清理的过程中老年代的空间不足以容纳应用产生的垃圾,则会抛出“concurrent mode failure”。
可能原因及方案
原因1:CMS触发太晚
方案:将-XX:CMSInitiatingOccupancyFraction=N调小;
原因2:空间碎片太多
方案:开启空间碎片整理,并将空间碎片整理周期设置在合理范围;
-XX:+UseCMSCompactAtFullCollection (空间碎片整理)
-XX:CMSFullGCsBeforeCompaction=n
原因3:垃圾产生速度超过清理速度
晋升阈值过小;
Survivor空间过小,导致溢出;
Eden区过小,导致晋升速率提高;
存在大对象;