1. 程式人生 > >深入理解jvm(二、常用的垃圾收集器)

深入理解jvm(二、常用的垃圾收集器)

1.Serial

單執行緒收集器,它在進行垃圾收集時必須暫停其他工作執行緒,直到收集結束。是虛擬機器執行在客戶端下的預設新生代收集器。

相對於其他收集器的單執行緒來說,簡單高效。

2.ParNew

相當於Serial收集器的多執行緒版本,一般是執行在服務端的虛擬機器首選的新生代收集器。

 3. Parallel Scavenge

Parallel Scavenge是一個使用複製演算法的新生代收集器。注重於吞吐量即執行使用者程式碼時間/(執行使用者程式碼時間+垃圾收集時間)。停頓時間越短越適合需要與使用者互動的程式,良好的響應速度能提升使用者體驗,而高吞吐量則可以高效率的利用CPU時間,儘快完成程式的運算任務,主要適合在後臺運算而不需要太多互動的任務。Parallel Scavenge提供了兩個引數用於精確控制吞吐量,控制最大垃圾收集停頓時間:-XX:MaxGCPauseMillis,設定吞吐量大小:-XX:GCTimeRatio。MaxGCPauseMillis引數允許的值是一個大於0的毫秒數。GCTimeRatio引數值是一個大於0小於100的整數,如果設為19,垃圾回收時間為1/(1+19)即5%。自適應調節引數:-XX:UseAdaptiveSizePolicy,虛擬機器會根據當前系統的執行情況收集效能監控資訊,動態調整這些引數以提供最合適的停頓時間或者最大吞吐量。

4.Serial Old

Serial Old是Serial收集器的老年代版本,它同樣是一個單執行緒收集器,使用“標記-整理”演算法。這個收集器的主要意義在於給客戶端模式下的虛擬機器使用。

 5.Parallel Old

Parallel Old時Parallel收集器的老年代版本,使用多執行緒和“標記-整理”演算法。在注重吞吐量以及CPU資源敏感的場合,優先考慮Parallel Scavenge加Parallel Old

6.CMS

CMS收集器是一種以獲取最短停頓時間為目標的收集器。基於“標記-清除”演算法。從總體上說,CMS的記憶體回收過程是可以與空戶執行緒併發執行的。

7.G1 

G1是一款面向服務端應用的垃圾收集器。基於“標記-整理”演算法實現。