这里先讲一下java的分代回收,效果图如下:
1.绝大多数刚创建的工具会被分配在Eden区,个中的大多数工具很快就会消亡。当Eden区满的时候,实行Minor GC,将消亡的工具

清理掉,并将剩余的工具复制到一个存活区Survivor0(此时,Survivor1是空缺的,两个Survivor总有一个是空缺的;此后,每次Eden

区满了,就实行一次Minor GC,并将剩余的工具都添加到Survivor0;当Survivor0也满的时候,将个中仍旧活着的工具直接复制到
Survivor1,往后Eden区实行Minor GC后,就将剩余的工具添加Survivor1(此时,Survivor0是空缺的)。
2.在年轻代中经历了N次回收后仍旧没有被打消的工具,会被放到年迈代中,在老年代内存被占满时触发Full GC,回收全体堆内存。
3.持久代:用于存放静态文件,比如java类、方法等。持久代对垃圾回收没有显著的影响。、
每次 Minor GC 会清理年轻代的内存
Major GC 是清理老年代,searchhub用的cms gc,过程包括:
•初始标记(STW initial mark)----- Stop The Word
•并发标记(Concurrent marking)
•并发预清理(Concurrent precleaning)
•重新标记(STW remark)----- Stop The Word
•并发清理(Concurrent sweeping)
•并发重置(Concurrent reset)
Full GC 是清理全体堆空间—包括年轻代和老年代。
触发最初征象的缘故原由是:java模块在cms gc的时候涌现了promotion failed,导致java模块终止程序了30s
总结:CMS GC时涌现promotion failed和concurrent mode failure
对付采取CMS进行旧生代GC的程序而言,尤其要把稳GC日志中是否有promotion failed和concurrent mode failure两种状况,
当这两种状况涌现时可能会触发Full GC。
promotion failed是在进行Minor GC时,survivor space放不下、工具只能放入旧生代,而此时旧生代也放不下造成的;
concurrent mode failure是在实行CMS GC的过程中同时有工具要放入旧生代,而此时旧生代空间不敷造成的










