java面試中經(jīng)常被問到CMS和G1垃圾收集器,故來總結(jié)下!

CMS收集器:concurrent mark and sweep,并發(fā)標(biāo)記和清除,追求最少的時(shí)間停留的收集器!

CMS執(zhí)行收集步驟:

1,初始標(biāo)記:快速標(biāo)記GC roots能直接關(guān)聯(lián)到的對(duì)象,速度快;需要STW(stop the world)

2,并發(fā)標(biāo)記:進(jìn)行GC Roots Tracing;(時(shí)間長,但是可以和用戶線程并行執(zhí)行)

java面試中常問的垃圾收集器CMS和G1是什么?

3,重新標(biāo)記:標(biāo)記并發(fā)標(biāo)記期間,用戶程序繼續(xù)運(yùn)行而導(dǎo)致的標(biāo)記變化(stop the world)

4,并發(fā)清除:并行執(zhí)行垃圾清除,這一步也會(huì)產(chǎn)生浮動(dòng)垃圾;(時(shí)間長,但是可以和用戶線程并行執(zhí)行)

優(yōu)點(diǎn):并發(fā)執(zhí)行效率好,停頓時(shí)間短;

缺點(diǎn):

1,并發(fā)清除的時(shí)候產(chǎn)生浮動(dòng)垃圾;

2,標(biāo)記-清除算法,產(chǎn)生大量的內(nèi)存碎片,很容易引發(fā)full gc;

3,默認(rèn)啟用的處理線程數(shù)為(CPU的個(gè)數(shù)+3)/4,即至少使用25%的CPU,多的話會(huì)是100%;

CMS主要針對(duì)老年代的垃圾收集,通常和ParNewGC(新生代收集)一起使用;

 

java面試中常問的垃圾收集器CMS和G1是什么?

G1:將整個(gè)堆內(nèi)存分為大小相等的多個(gè)獨(dú)立region區(qū),保留新生代,老年代概念,卻沒有做物理隔離,G1記錄每個(gè)region中的對(duì)象活性,根據(jù)用戶設(shè)置的停頓時(shí)間,選擇活性更低的region進(jìn)行回收,這樣能降低停頓時(shí)間;

java面試中常問的垃圾收集器CMS和G1是什么?

G1新生代收集:新生代達(dá)到比例的時(shí)候進(jìn)行收集,根據(jù)統(tǒng)計(jì)信息動(dòng)態(tài)調(diào)整Eden和Survivor的大小,合理利用內(nèi)存;

G1老年代收集:

1,初始標(biāo)記:跟CMS類似

2,并發(fā)標(biāo)記:跟CMS類似

3,最終標(biāo)記:跟CMS類似

4,篩選回收:對(duì)所有region中的回收成本進(jìn)行排序,同時(shí)根據(jù)用戶設(shè)定的停頓時(shí)間來指定回收計(jì)劃,并發(fā)清除對(duì)象(stop the world)

G1優(yōu)點(diǎn):

1,停頓時(shí)間可預(yù)測:根據(jù)用戶設(shè)定的停頓時(shí)間進(jìn)行stop the world和gc;

2,region的回收具有優(yōu)先級(jí):對(duì)象收集更有效率和針對(duì)性;

3,標(biāo)記-整理算法:不再有內(nèi)存碎片產(chǎn)生;