Full GC? 將對(duì)年輕代拂玻、老年代以及元空間聘芜、堆外內(nèi)存進(jìn)行垃圾進(jìn)行回收.
觸發(fā)Full GC原因如下:
1歇拆、當(dāng)年輕代晉升到老年代的對(duì)象大小比較目前老年代剩余的空間大小還要大時(shí)择浊,此時(shí)會(huì)觸發(fā)Full GC
2伤靠、當(dāng)老年化的空間使用率超過某閥值的時(shí)婿着,此時(shí)會(huì)觸發(fā)Full GC
3、當(dāng)元空間不足時(shí)(JDK1.7永久代不足時(shí))醋界,此時(shí)會(huì)觸發(fā)Full GC
4竟宋、當(dāng)調(diào)用System.gc(),JVM也會(huì)按排一次Full GC
“Concurrent Mode Failure” 失敗會(huì)導(dǎo)另一外Full GC? (原因是:大量新對(duì)象生成\年輕代空間較行畏摹)
CMS垃圾收集器特有的錯(cuò)誤丘侠,CMS的垃圾清理和引用線程是并行進(jìn)行的,如果在并行清理的過程中老年代的空間不足以容納應(yīng)用產(chǎn)生的垃圾逐样,則會(huì)拋出“concurrent mode failure”蜗字。
可能原因及方案
原因1:CMS觸發(fā)太晚
方案:將-XX:CMSInitiatingOccupancyFraction=N調(diào)小脂新;
原因2:空間碎片太多
方案:開啟空間碎片整理肃廓,并將空間碎片整理周期設(shè)置在合理范圍悲幅;
-XX:+UseCMSCompactAtFullCollection (空間碎片整理)
-XX:CMSFullGCsBeforeCompaction=n
原因3:垃圾產(chǎn)生速度超過清理速度
晉升閾值過小;
Survivor空間過小合溺,導(dǎo)致溢出囤踩;
Eden區(qū)過小蚓聘,導(dǎo)致晉升速率提高壳鹤;
存在大對(duì)象;