Serial收集器
- 此收集器是單線程的浙巫,但它的”單線程“的意義并不僅僅說明它是一個CPU或一條收集線程去完成垃圾收集工作,更重要的是在進(jìn)行垃圾收集時刷后,必須暫停其他所有的工作線程,直到它收集結(jié)束(會發(fā)生STW)渊抄。
- 簡單高效(與其他收集器的單線程比)沒有線程交互的開銷尝胆,專心做垃圾收集。
- 新生代收集器护桦、使用復(fù)制算法含衔。
- 大多運(yùn)行在Client模式下的默認(rèn)新生代收集器。
ParNew收集器
- Serial收集器的多線程版本二庵,添加了可用的所有控制參數(shù)(例如:-xx:SurvivorRatio贪染、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure等)催享、收集算法杭隙、Stop the World、對象分配規(guī)則因妙,回收策略等都與Serial收集器完全一樣痰憎。
- 新生代收集器,使用復(fù)制算法攀涵。
- 大多運(yùn)行在Server模式下的默認(rèn)新生代收集器铣耘。
- 目前只有它能與CMS收集器配合工作。
parallel Scavenge收集器
- 新生代收集器以故,使用復(fù)制算法蜗细。
- 可自適應(yīng)調(diào)節(jié)。
- 提供了控制參數(shù)(例如:-xx:SurvivorRatio怒详、-XX:PretenureSizeThreshold炉媒、-XX:HandlePromotionFailure踪区、-XX:UserAdaptiveSizePolicy),-XX:UserAdaptiveSizePolicy是個開關(guān)參數(shù),當(dāng)打開后橱野,就不需要手動指定新生代的大行嘟伞(-Xmn),Eden與Survivor區(qū)的比例(-XX:SurvivorRatio)水援,晉升老年代對象年齡(-XX:PretenureSizeThreshold)
- 吞吐量優(yōu)先收集器
Serial Old收集器
- 老年代收集器密强、單線程收集器、使用”標(biāo)記-整理“算法蜗元。
Parallel Old收集器
- 老年代收集器或渤,使用多線程和”標(biāo)記-整理“算法,JDK1.6中才開始提供奕扣。
- 吞吐量優(yōu)先收集器
CMS收集器(Concurrent Market Sweep)
- CMS收集器是一種以獲取最短回收停頓時間為目標(biāo)的收集器薪鹦。
- CMS老年代收集器。
- 并發(fā)收集器惯豆。
- 基于”標(biāo)記-清除“算法實(shí)現(xiàn)池磁,整個過程分為4個步驟:
1:初始化標(biāo)記(CMS initial mark)
2:并發(fā)標(biāo)記(CMS concurrent mark)
3:重新標(biāo)記(CMS remark )
4:并發(fā)清除(CMS concurrent Sweep)
其中,初始標(biāo)記楷兽、清除標(biāo)記仍然需要STW,初始標(biāo)記僅僅只是標(biāo)記一下GC Roots能直接關(guān)聯(lián)到的對象地熄,速度很快。
特點(diǎn):并發(fā)收集芯杀、低停頓端考。
缺點(diǎn):
1:CMS收集器無法處理浮動垃圾,可能出現(xiàn)Concurrent Mode Failure 失敗導(dǎo)致另一次Full GC的發(fā)生揭厚。
2:會產(chǎ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í)行的。
G1收集器
G1是一款面向服務(wù)端應(yīng)用的垃圾收集器唧垦,與CMS相比捅儒,G1具備如下特點(diǎn):
1:并行與并發(fā)
2:分代收集
3:空間整合,與CMS的“標(biāo)記-清理”算法不同,G1從整體來看是基于“標(biāo)記-整理”算法實(shí)現(xiàn)的收集器
4:可預(yù)測的停頓
G1收集器的運(yùn)作大致可劃分為幾個步驟
1:初始化標(biāo)記(initial marking)
2:并發(fā)標(biāo)記(concurrent marking)
3:最終標(biāo)記(Final Marking)
4:篩選回收(Live Data Counting Evacuation)