1. 程式人生 > 實用技巧 >ParNew回收器和Parallel Scavenge回收器介紹

ParNew回收器和Parallel Scavenge回收器介紹

ParNew回收器

1.如果說Serial GC是年輕代中的單執行緒垃圾收集器,那麼ParNew收集器則是Serial收集器的多執行緒版本。

2.ParNew收集器除了採用並行回收的方式執行記憶體回收外,兩款垃圾收集器之間沒有任何區別。ParNew收集器在年輕代中也是採用複製演算法"Stop-The-World"機制。

3.ParNew是很多JVM執行在Server模式下新生代的預設垃圾收集器。

ParNew回收器的工作過程如下圖:

在程式中,開發人員可以通過選項”-XX:+UseParNewGC"手動指定使用ParNew收集器執行記憶體回收任務。它表示年輕代使用並行收集器,不影響老年代。也可以通過選項"-XX:ParallelGCThreads"限制執行緒數量,預設開啟和CPU資料相同的執行緒數。

Parallel Scavenge回收器:吞吐量優先

PaParallel Scavenge收集器同樣採用了複製演算法、並行回收和"Stop The World"機制。它和ParNew收集器不同的是,PaParallel Scavenge收集器的目標則是達到一個可控制的吞吐量,它也被稱為吞吐量優先的垃圾收集器。自適應調節策略也是PaParallel Scavenge與ParNew一個重要區別。

高吞吐量則可以高效地利用CPU時間,儘快完成程式的運算任務,主要適合在後臺運算而不需要太多互動地任務。因此,常見在伺服器環境中使用。例如,那些執行批量處理、訂單處理、工資支付、科學計算的應用程式。

PaParallel Scavenge收集器在JDK1.6時提供了用於執行老年代收集的Parallel Old收集器,用來代替老年代的Serial Old收集器。Parallel Old收集器採用了標記-壓縮演算法,但同樣也是基於並行回收和“Stop-The-World"機制。

PaParallel Scavenge工作過程如下:

在程式吞吐量優先的應用場景中,Parallel收集器和Parallel Old收集器的組合,在Server模式下的記憶體回收效能很不錯。在JDK8中,預設是此垃圾收集器。