一,Serial收集器
- 屬于年輕代收集器
- 單線程收集器---只會使用一個CPU或者一個收集線程去完成垃圾收集工作
- 他在進行垃圾回收時,必須暫停其他所有的工作線程,直至他收集結(jié)束(Stop The World)
- 優(yōu)點:對于限定單個CPU的環(huán)境來說,Serial收集器沒有線程交互的開銷,簡單高效
二,ParNew收集器
- 屬于年輕代收集器
- ParNew收集器是Serial收集器的多線程版本,除了使用多條線程進行垃圾收集外,其余行為包括Serial收集器可以使用的控制參數(shù)(-XX:SurvivorRatio, -XX:PretenureSizeThreshold, -XX:HandlePromotionFailure等),收集算法等等都是一樣的
三,Parallel Scavenge收集器
- 屬于年輕代收集器
- Parallel Scavenge收集器的目標是要達到一個可控制的吞吐量(Throughput).
- 這里的吞吐量是: 吞吐量 = CPU運行用戶代碼的時間 / CPU總消耗時間
- 由于與吞吐量關(guān)系密切, Parallel Scanvenge收集器也經(jīng)常稱為"吞吐量優(yōu)先"收集器
- 精確控制吞吐量的參數(shù)
- 控制最大垃圾收集停頓時間 -XX:MaxGCPauseMillis
- 直接設(shè)置吞吐量大小 -XX:CGTimeRatio
四,Serial Old收集器
- 老年代收集器,采用"標記--整理"算法
- 單線程收集器
- 作用
- 在JDK1.5以及之前版本中與Parallel Scanvenge收集器搭配使用
- 作為CMS收集器的后備預案,在并發(fā)收集發(fā)生Concurrent Mode Failure時使用.
五,Parallel Old收集器
- 老年代收集器,采用"標記--整理"算法
- 多線程收集器
- 在吞吐量以及CPU資源敏感的情況,可以考慮 Parallel Scanvenge和Parallel Old收集器的組合
六,CMS(Concurrent Mark Sweep)收集器
- 屬于老年代收集器,采用"標記--清除"算法
- CMS是一種以獲取最短回收停頓時間為目標的收集器
- 真正意義上的第一款并發(fā)收集器
- 收集過程四個步驟
- 初始標記(CMS initial mark)
僅僅是標記一下GC Roots能直接關(guān)聯(lián)到的對象,速度比較快 - 并發(fā)標記(CMS concurrent mark)
是進行GC Roots Tracing的過程 - 重新標記(CMS remark)
修正并發(fā)標記期間因用戶程序繼續(xù)運行而導致標記產(chǎn)生變動的那一部分對象的標記記錄. - 并發(fā)清除(CMS concurrent sweep)
- 初始標記(CMS initial mark)
初始標記,重新標記這兩個步驟仍然需要"Stop The World",這兩個階段耗時比較短. 整個過程耗時比較長的并發(fā)標記和并發(fā)清除過程是與用戶線程一起并發(fā)執(zhí)行的.
- CMS的缺點
- CMS收集器對CPU資源比較敏感.
在并發(fā)階段,他雖然不會導致用戶線程停頓,但是會因為占用了一部分CPU資源而導致應(yīng)用程序變慢,總吞吐量降低 - CMS收集器無法處理浮動垃圾(Floating Garbage)
- 浮動垃圾(Floating Garbage):由于CMS并發(fā)清理階段用戶線程還在運行著,伴隨程序運行自然就會有新的垃圾不斷產(chǎn)生,這一部分垃圾出現(xiàn)在標記過程之后,CMS無法在當次收集中處理他們,只能留待下一次GC再清理,這一部分垃圾就稱為"浮動垃圾".
- 由于無法處理浮動垃圾,可能會導致"Concurrent Mode Failure"失敗而導致另一次Full GC的產(chǎn)生
- CMS收集器對CPU資源比較敏感.
- 由于垃圾手機階段用戶線程還在運行,那么就需要預留有足夠的內(nèi)存空間給用戶線程使用,因此CMS收集器不能像其他收集器那樣等到老年代幾乎完全被填滿了再進行收集.
- CMS是一款基于"標記-清除"算法實現(xiàn)的收集器, 意味著會有大量內(nèi)存碎片產(chǎn)生
七,G1收集器
- 面向服務(wù)端的垃圾收集器
- 可以收集年輕代,老年代
- 能充分利用CPU,多核環(huán)境下的硬件優(yōu)勢
- 可建立可預測的停頓時間模型
參考:
1,<<深入理解Java虛擬機 JVM高級特性與最佳實踐 第二版 周志明>>
2,http://www.importnew.com/1993.html?spm=5176.100239.blogcont3489.3.qaw2ye