垃圾收集器

Serial收集器

優(yōu)點:簡單而高效(與其他收集器的單線程相比)。Serial收集器由于沒有線程交互的開銷,自然可以獲得很高的單線程收集效率。

缺點:Stop The World

新生代采用復(fù)制算法,老年代采用標(biāo)記-整理算法。


ParNew收集器:

ParNew收集器其實就是Serial收集器的多線程版本,除了使用多線程進(jìn)行垃圾收集外,其余行為(控制參數(shù)、收集算法、回收策略等等)和Serial收集器完全一樣。

新生代采用復(fù)制算法,老年代采用標(biāo)記-整理算法


Parallel Scavenge收集器:

Parallel Scavenge 收集器類似于ParNew 收集器,是Server?模式(內(nèi)存大于2G,2個cpu)下的默認(rèn)收集器

特點:

Parallel Scavenge收集器關(guān)注點是吞吐量(高效率的利用CPU)。

所謂吞吐量就是CPU中用于運行用戶代碼的時間與CPU總消耗時間的比值

CMS等垃圾收集器的關(guān)注點更多的是用戶線程的停頓時間(提高用戶體驗)。



Serial Old收集器:

Serial收集器的老年代版本

Parallel Old收集器:

Parallel Scavenge收集器的老年代版本。

CMS收集器(-XX:+UseConcMarkSweepGC(主要是old區(qū)使用)):

CMS(Concurrent Mark Sweep——標(biāo)記-清除)收集器是一種以獲取最短回收停頓時間為目標(biāo)的收集器。

它而非常符合在注重用戶體驗的應(yīng)用上使用,它是HotSpot虛擬機(jī)第一款真正意義上的并發(fā)收集器,它第一次實現(xiàn)了讓垃圾收集線程與用戶線程(基本上)同時工作

過程:


優(yōu)點:

并發(fā)收集、低停頓

缺點:

1.對CPU資源敏感(會和服務(wù)搶資源)

2.無法處理浮動垃圾(在java業(yè)務(wù)程序線程與垃圾收集線程并發(fā)執(zhí)行過程中又產(chǎn)生的垃圾,這種浮動垃圾只能等到下一次gc再清理了);

3.它使用的回收算法-“標(biāo)記-清除”算法會導(dǎo)致收集結(jié)束時會有大量空間碎片產(chǎn)生

G1收集器(-XX:+UseG1GC):

G1 (Garbage-First)是一款面向服務(wù)器的垃圾收集器,主要針對配備多顆處理器及大容量內(nèi)存的機(jī)器. 以極高概率滿足GC停頓時間要求的同時,還具備高吞吐量性能特征.


G1將Java堆劃分為多個大小相等的獨立區(qū)域(Region),雖保留新生代和老年代的概念,但不再是物理隔閡了,它們都是(可以不連續(xù))Region的集合。

分配大對象(直接進(jìn)Humongous區(qū),專門存放短期巨型對象,不用直接進(jìn)老年代,避免Full GC的大量開銷)不會因為無法找到連續(xù)空間而提前觸發(fā)下一次GC。

特點:

并行與并發(fā):

G1能充分利用CPU、多核環(huán)境下的硬件優(yōu)勢,使用多個CPU(CPU或者CPU核心)來縮短Stop-The-World停頓時間。部分其他收集器原本需要停頓Java線程來執(zhí)行GC動作,G1收集器仍然可以通過并發(fā)的方式讓java程序繼續(xù)執(zhí)行。

分代收集:

雖然G1可以不需要其他收集器配合就能獨立管理整個GC堆,但是還是保留了分代的概念

空間整合:

與CMS的“標(biāo)記--清理”算法不同,G1從整體來看是基于“標(biāo)記整理”算法實現(xiàn)的收集器;從局部上來看是基于“復(fù)制”算法實現(xiàn)的。

可預(yù)測停頓:


G1收集器的運作大致分為以下幾個步驟:

初始標(biāo)記(initial mark,STW):

在此階段,G1 GC 對根進(jìn)行標(biāo)記。該階段與常規(guī)的 (STW)年輕代垃圾回收密切相關(guān)

并發(fā)標(biāo)記(Concurrent Marking):

G1 GC 在整個堆中查找可訪問的(存活的)對象

最終標(biāo)記(Remark,STW):

該階段是 STW 回收,幫助完成標(biāo)記周期

篩選回收(Cleanup,STW):

篩選回收階段首先對各個Region的回收價值和成本進(jìn)行排序,根據(jù)用戶所期望的GC停頓時間來制定回收計劃,這個階段其實也可以做到與用戶程序一起并發(fā)執(zhí)行,但是因為只回收一部分Region,時間是用戶可控制的,而且停頓用戶線程將大幅提高收集效率

G1垃圾收集分類:

YoungGC:

1.新對象進(jìn)入Eden區(qū)

2.存活對象拷貝到Survivor區(qū)

3.存活時間達(dá)到年齡閾值時,對象晉升到Old區(qū)

MixedGC:

1.不是FullGC,回收所有的Young和部分Old(根據(jù)期望的GC停頓時間確定old區(qū)垃圾收集的優(yōu)先順序)

2.global?concurrent?marking (全局并發(fā)標(biāo)記)

? ? 2.1.Initial marking phase:標(biāo)記GC Root,STW

? ? 2.2?Root?region?scanning?phase:標(biāo)記存活Region

????2.3.Concurrent?marking?phase:標(biāo)記存活的對象

? ? 2.4?Remark phase :重新標(biāo)記,STW

? ? 2.5.Cleanup phase:部分STW

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

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

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