CMS是一款優(yōu)秀的收集器,主要優(yōu)點(diǎn):并發(fā)收集闹丐、低停頓。
缺點(diǎn):
1)CMS收集器對(duì)CPU資源非常敏感被因。在并發(fā)階段卿拴,它雖然不會(huì)導(dǎo)致用戶(hù)線(xiàn)程停頓,但是會(huì)因?yàn)檎加昧艘徊糠志€(xiàn)程而導(dǎo)致應(yīng)用程序變慢梨与,總吞吐量會(huì)降低堕花。
2)CMS收集器無(wú)法處理浮動(dòng)垃圾,可能會(huì)出現(xiàn)“Concurrent?Mode?Failure(并發(fā)模式故障)”失敗而導(dǎo)致Full?GC產(chǎn)生粥鞋。
浮動(dòng)垃圾:由于CMS并發(fā)清理階段用戶(hù)線(xiàn)程還在運(yùn)行著缘挽,伴隨著程序運(yùn)行自然就會(huì)有新的垃圾不斷產(chǎn)生,這部分垃圾出現(xiàn)的標(biāo)記過(guò)程之后,CMS無(wú)法在當(dāng)次收集中處理掉它們壕曼,只好留待下一次GC中再清理苏研。這些垃圾就是“浮動(dòng)垃圾”。
3)CMS是一款“標(biāo)記--清除”算法實(shí)現(xiàn)的收集器腮郊,容易出現(xiàn)大量空間碎片摹蘑。當(dāng)空間碎片過(guò)多,將會(huì)給大對(duì)象分配帶來(lái)很大的麻煩轧飞,往往會(huì)出現(xiàn)老年代還有很大空間剩余纹蝴,但是無(wú)法找到足夠大的連續(xù)空間來(lái)分配當(dāng)前對(duì)象,不得不提前觸發(fā)一次Full?GC踪少。
G1是一款面向服務(wù)端應(yīng)用的垃圾收集器。G1具備如下特點(diǎn):
1援奢、并行于并發(fā):G1能充分利用CPU兼犯、多核環(huán)境下的硬件優(yōu)勢(shì),使用多個(gè)CPU(CPU或者CPU核心)來(lái)縮短stop-The-World停頓時(shí)間集漾。部分其他收集器原本需要停頓Java線(xiàn)程執(zhí)行的GC動(dòng)作切黔,G1收集器仍然可以通過(guò)并發(fā)的方式讓java程序繼續(xù)執(zhí)行。
2具篇、分代收集:雖然G1可以不需要其他收集器配合就能獨(dú)立管理整個(gè)GC堆纬霞,但是還是保留了分代的概念。它能夠采用不同的方式去處理新創(chuàng)建的對(duì)象和已經(jīng)存活了一段時(shí)間驱显,熬過(guò)多次GC的舊對(duì)象以獲取更好的收集效果诗芜。
3、空間整合:與CMS的“標(biāo)記--清理”算法不同埃疫,G1從整體來(lái)看是基于“標(biāo)記整理”算法實(shí)現(xiàn)的收集器伏恐;從局部上來(lái)看是基于“復(fù)制”算法實(shí)現(xiàn)的。
4栓霜、可預(yù)測(cè)的停頓:這是G1相對(duì)于CMS的另一個(gè)大優(yōu)勢(shì)翠桦,降低停頓時(shí)間是G1和CMS共同的關(guān)注點(diǎn),但G1除了追求低停頓外胳蛮,還能建立可預(yù)測(cè)的停頓時(shí)間模型销凑,能讓使用者明確指定在一個(gè)長(zhǎng)度為M毫秒的時(shí)間片段內(nèi),
5仅炊、G1運(yùn)作步驟:
1斗幼、初始標(biāo)記;2茂洒、并發(fā)標(biāo)記孟岛;3瓶竭、最終標(biāo)記;4渠羞、篩選回收