7種JVM垃圾收集器特點,優劣勢、及使用場景

常見的垃圾收集器有3類:

file

1.新生代的收集器包括:

  • Serial
  • PraNew
  • Parallel Scavenge

2.老年代的收集器包括:

  • Serial Old
  • Parallel Old
  • CMS

3.回收整個Java堆(新生代和老年代)

  • G1收集器

今天我們詳細談談以上7種垃圾收集器的優劣勢和使用場景。

file

新生代垃圾收集器

1.Serial串行收集器-複製算法

Serial收集器是新生代單線程收集器,優點是簡單高效,算是最基本、發展歷史最悠久的收集器。它在進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集完成。

Serial收集器依然是虛擬機運行在Client模式下默認新生代收集器,對於運行在Client模式下的虛擬機來說是一個很好的選擇。

2.ParNew收集器-複製算法

ParNew收集器是新生代並行收集器,其實就是Serial收集器的多線程版本。

除了使用多線程進行垃圾收集之外,其餘行爲包括Serial收集器可用的所有控制參數、收集算法、Stop The Worl、對象分配規則、回收策略等都與Serial 收集器完全一樣。

3.Parallel Scavenge(並行回收)收集器-複製算法

Parallel Scavenge收集器是新生代並行收集器,追求高吞吐量,高效利用 CPU。

該收集器的目標是達到一個可控制的吞吐量(Throughput)。所謂吞吐量就是CPU用於運行用戶代碼的時間與CPU總消耗時間的比值,即 吞吐量=運行用戶代碼時間/(運行用戶代碼時間 垃圾收集時間)

停頓時間越短就越適合需要與用戶交互的程序,良好的響應速度能提升用戶體驗,而高吞吐量則可用高效率地利用CPU時間,儘快完成程序的運算任務,主要適合在後臺運算而不需要太多交互的任務。

老年代垃圾收集器

1.Serial Old 收集器-標記整理算法

Serial Old是Serial收集器的老年代版本,它同樣是一個單線程(串行)收集器,使用標記整理算法。這個收集器的主要意義也是在於給Client模式下的虛擬機使用。

file

如果在Server模式下,主要兩大用途:

(1)在JDK1.5以及之前的版本中與Parallel Scavenge收集器搭配使用

(2)作爲CMS收集器的後備預案,在併發收集發生Concurrent Mode Failure時使用

2.Parallel Old 收集器-標記整理算法

Parallel Old 是Parallel Scavenge收集器的老年代版本,使用多線程和“標記-整理”算法。這個收集器在1.6中才開始提供。

3.CMS收集器-標記整理算法

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間爲目標的收集器。

目前很大一部分的Java應用集中在互聯網站或者B/S系統的服務端上,這類應用尤其重視服務器的響應速度,希望系統停頓時間最短,以給用戶帶來較好的體驗。CMS收集器就非常符合這類應用的需求。

CMS收集器是基於“標記-清除”算法實現的,它的運作過程相對前面幾種收集器來說更復雜一些,整個過程分爲4個步驟:

(1)初始標記

(2)併發標記

(3)重新標記

(4)併發清除

其中,初始標記、重新標記這兩個步驟仍然需要“Stop The World”

CMS收集器主要優點:

併發收集低停頓CMS三個明顯的缺點:

(1)CMS收集器對CPU資源非常敏感。CPU個數少於4個時,CMS對於用戶程序的影響就可能變得很大,爲了應付這種情況,虛擬機提供了一種稱爲“增量式併發收集器”的CMS收集器變種。

(2)CMS收集器無法處理浮動垃圾,可能出現“Concurrent Mode Failure”失敗而導致另一次Full GC的產生。在JDK1.5的默認設置下,CMS收集器當老年代使用了68%的空間後就會被激活。

(3)CMS是基於“標記-清除”算法實現的收集器,手機結束時會有大量空間碎片產生。空間碎片過多,可能會出現老年代還有很大空間剩餘,但是無法找到足夠大的連續空間來分配當前對象,不得不提前出發FullGC。

新生代和老年代垃圾收集器

1.G1收集器-標記整理算法

JDK1.7後全新的回收器, 用於取代CMS收集器。

G1收集器的優勢:

  • 獨特的分代垃圾回收器,分代GC: 分代收集器, 同時兼顧年輕代和老年代
  • 使用分區算法, 不要求eden, 年輕代或老年代的空間都連續
  • 並行性: 回收期間, 可由多個線程同時工作, 有效利用多核cpu資源
  • 空間整理: 回收過程中, 會進行適當對象移動, 減少空間碎片
  • 可預見性: G1可選取部分區域進行回收, 可以縮小回收範圍, 減少全局停頓

G1收集器的運作大致可劃分爲一下步驟:

file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章