Serial Old收集器
Serial Old收集器是Serial收集器的老年代版本,同樣是一個單線程收集器,使用“標記-整理”算法。這個收集器的主要意義也是在於Client模式下的虛擬機使用。
主要用途:
1、一種用途是在JDK1.5以及之前的版本與Parallel Scavenge收集器搭配使用。
2、另一種用途就是作為CMS收集器的後備預案,在並發收集發生Concurrent Mode Failure時使用。
Parallel Old收集器
Parallel old 是Parallel Scavenge收集器的老年代版本,使用多線程和“標記-整理”算法。這個收集器是JDK6才出現的,在之前Parallel Scavenge一直處於尴尬狀態:如圖所示
如果新生代選擇了Parallel Scavenge 收集器老年代除了選擇Serial Old(MSC)之外別無選擇。由於老年代Serial Old 在服務端應用的性能上的拖累,使用Parallel Scavenge 不一定能在整體應用上獲得吞吐量最大化的效果。直到Parallel Old收集器出現之後,“吞吐量優先”的收集器終於有了名副其實的應用組合在注重吞吐量以及CPU資源敏感的場合,都可以優先考慮Parallel Scavenge 和Parallel Old的組合:
CMS收集器
CMS收集器是一種以獲取最短回收停頓時間為目標的收集器。目前很大一部分的Java應用集中在互聯網或者B/S的服務器上,這類應用尤其重視服務的相應速度。CMS收集器是基於“標記-清除”算法實現的,他的運作分為四個過程:
1、初始標記
2、並發標記
3、重新標記
4、並發清除
其中,初始標記、重新標記這兩個步驟仍然需要“stop the world”。初始標記僅僅是標記一下GC Roots能直接關聯到的對象,速度很快,並發標記階段就是進行GC roots Tracing的過程。
CMS收集器的運作步驟:
CMS的缺點