1. 程式人生 > >jvm 4種常用的垃圾收集器

jvm 4種常用的垃圾收集器

並行回收和序列回收:

序列回收: JDK1.5前的預設演算法 缺點是隻有一個執行緒,執行垃圾回收時程式停止的時間比較長(單執行緒)

並行回收: 多個執行緒執行垃圾回收適合於吞吐量的系統,回收時系統會停止執行(多執行緒)適用於高併發專案

serial收集器(序列):

序列收集器是最古老,最穩定以及效率高的收集器,可能會產生較長的停頓,只使用一個執行緒去回收。

一個單執行緒的收集器,在進行垃圾收集時候,必須暫停其他所有的工作執行緒直到它收集結束。新生代、老年代都使用序列回收。

特點:CPU利用率最高,停頓時間即使用者等待時間比較長。

適用場景:小型應用

通過JVM引數-XX:+UseSerialGC

ParNew收集器(序列,並行)

ParNew收集器其實就是Serial收集器的多執行緒版本。新生代並行(新生代回收頻率高),老年代序列;新生代複製演算法、老年代標記-壓縮。

引數控制:-XX:+UseParNewGC

parallel收集器(並行)

Parallel Scavenge收集器類似ParNew收集器,Parallel收集器更關注系統的吞吐量。可以通過引數來開啟自適應調節策略,虛擬機器會根據當前系統的執行情況收集效能監控資訊,動態調整這些引數以提供最合適的停頓時間或最大的吞吐量;也可以通過引數控制GC的時間不大於多少毫秒或者比例;新生代複製演算法、老年代標記-壓縮。

特點:停頓時間短,回收效率高,對吞吐量要求高。

適用場景:大型應用,科學計算,大規模資料採集等

通過JVM引數 -XX:+UseParallelGC 

cms收集器

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

目前很大一部分的Java應用都集中在網際網路站或B/S系統的服務端上,這類應用尤其重視服務的響應速度,希望系統停頓時間最短,以給使用者帶來較好的體驗。

採用“標記-清除”演算法實現,使用多執行緒的演算法去掃描堆,對發現未使用的物件進行回收

特點:響應時間優先,減少垃圾收集停頓時間

適應場景:大型伺服器等。

通過JVM引數 -XX:+UseConcMarkSweepGC設定

g1收集器

在cms上,做改進,用的最多的收集器。

在G1中,堆被劃分成 許多個連續的區域(region)。採用G1演算法進行回收,吸收了CMS收集器特點。

特點:支援很大的堆,高吞吐量

  --支援多CPU和垃圾回收執行緒

  --在主執行緒暫停的情況下,使用並行收集

  --在主執行緒執行的情況下,使用併發收集

實時目標:可配置在N毫秒內最多隻佔用M毫秒的時間進行垃圾回收

通過JVM引數 -XX:+UseG1GC 使用G1垃圾回收器