垃圾收集器

Serial收集器

單線程收集器。新生代、老年代使用串行回收;新生代復(fù)制算法、老年代標(biāo)記-整理;垃圾收集的過程中會Stop The World(服務(wù)暫停)。


ParNew收集器

ParNew收集器其實(shí)就是Serial收集器的多線程版本。新生代并行,老年代串行;新生代復(fù)制算法、老年代標(biāo)記-整理。


CMS收集器

整個過程分為4個步驟,包括:

初始標(biāo)記(CMS initial mark)

并發(fā)標(biāo)記(CMS concurrent mark)

重新標(biāo)記(CMS remark)

并發(fā)清除(CMS concurrent sweep)

其中初始標(biāo)記、重新標(biāo)記這兩個步驟仍然需要“Stop The World”。初始標(biāo)記僅僅只是標(biāo)記一下GC Roots能直接關(guān)聯(lián)到的對象,速度很快,并發(fā)標(biāo)記階段就是進(jìn)行GC Roots Tracing的過程,而重新標(biāo)記階段則是為了修正并發(fā)標(biāo)記期間,因用戶程序繼續(xù)運(yùn)作而導(dǎo)致標(biāo)記產(chǎn)生變動的那一部分對象的標(biāo)記記錄,這個階段的停頓時間一般會比初始標(biāo)記階段稍長一些,但遠(yuǎn)比并發(fā)標(biāo)記的時間短。

由于整個過程中耗時最長的并發(fā)標(biāo)記和并發(fā)清除過程中,收集器線程都可以與用戶線程一起工作,所以總體上來說,CMS收集器的內(nèi)存回收過程是與用戶線程一起并發(fā)地執(zhí)行。一般作為老年代收集器。

缺點(diǎn):

有新的垃圾產(chǎn)生,這些垃圾出現(xiàn)在標(biāo)記過程之后,CMS無法在本次收集中處理掉它們,只好等待下一次GC時再將其清理掉,這些垃圾就稱為浮動垃圾。

CMS收集器是基于標(biāo)記-清除算法,因此不可避免會產(chǎn)生大量不連續(xù)的內(nèi)存碎片,如果無法找到一塊足夠大的連續(xù)內(nèi)存存放對象時,將會因此觸發(fā)Full GC。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容