
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