JVm - Parallel Scavenge 垃圾回收器

Parallel Scavenge垃圾收集器因爲與吞吐量關係密切,也稱爲吞吐量收集器(Throughput Collector)。

1、特點


(A)、有一些特點與ParNew收集器相似

新生代收集器;

採用複製算法;

多線程收集;

(B)、主要特點是:它的關注點與其他收集器不同

CMS等收集器的關注點是儘可能地縮短垃圾收集時用戶線程的停頓時間;

而Parallel Scavenge收集器的目標則是達一個可控制的吞吐量(Throughput);

關於吞吐量與收集器關注點說明詳見本節後面;

2、應用場景


高吞吐量爲目標,即減少垃圾收集時間,讓用戶代碼獲得更長的運行時間;

當應用程序運行在具有多個CPU上,對暫停時間沒有特別高的要求時,即程序主要在後臺進行計算,而不需要與用戶進行太多交互;

例如,那些執行批量處理、訂單處理、工資支付、科學計算的應用程序;

3、設置參數


Parallel Scavenge收集器提供兩個參數用於精確控制吞吐量:

(A)、"-XX:MaxGCPauseMillis"

控制最大垃圾收集停頓時間,大於0的毫秒數;

MaxGCPauseMillis設置得稍小,停頓時間可能會縮短,但也可能會使得吞吐量下降;

因爲可能導致垃圾收集發生得更頻繁;

(B)、"-XX:GCTimeRatio"

設置垃圾收集時間佔總時間的比率,0<n<100的整數;

GCTimeRatio相當於設置吞吐量大小;

垃圾收集執行時間佔應用程序執行時間的比例的計算方法是:

1 / (1 + n)

例如,選項-XX:GCTimeRatio=19,設置了垃圾收集時間佔總時間的5%--1/(1+19);

默認值是1%--1/(1+99),即n=99;

垃圾收集所花費的時間是年輕一代和老年代收集的總時間;

如果沒有滿足吞吐量目標,則增加代的內存大小以儘量增加用戶程序運行的時間;

此外,還有一個值得關注的參數:

(C)、"-XX:+UseAdptiveSizePolicy"

開啓這個參數後,就不用手工指定一些細節參數,如:

新生代的大小(-Xmn)、Eden與Survivor區的比例(-XX:SurvivorRation)、晉升老年代的對象年齡(-XX:PretenureSizeThreshold)等;

JVM會根據當前系統運行情況收集性能監控信息,動態調整這些參數,以提供最合適的停頓時間或最大的吞吐量,這種調節方式稱爲GC自適應的調節策略(GC Ergonomiscs);

這是一種值得推薦的方式:

(1)、只需設置好內存數據大小(如"-Xmx"設置最大堆);

(2)、然後使用"-XX:MaxGCPauseMillis"或"-XX:GCTimeRatio"給JVM設置一個優化目標;

(3)、那些具體細節參數的調節就由JVM自適應完成;

這也是Parallel Scavenge收集器與ParNew收集器一個重要區別;

更多目標調優和GC自適應的調節策略說明請參考:

《Memory Management in the Java HotSpot™ Virtual Machine》 5節 Ergonomics -- Automatic Selections and Behavior Tuning:http://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf

《Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide》 第2節 Ergonomics:http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html#ergonomics

4、吞吐量與收集器關注點說明


(A)、吞吐量(Throughput)

CPU用於運行用戶代碼的時間與CPU總消耗時間的比值;

即吞吐量=運行用戶代碼時間/(運行用戶代碼時間+垃圾收集時間);

高吞吐量即減少垃圾收集時間,讓用戶代碼獲得更長的運行時間;

(B)、垃圾收集器期望的目標(關注點)

(1)、停頓時間

停頓時間越短就適合需要與用戶交互的程序;

良好的響應速度能提升用戶體驗;

(2)、吞吐量

高吞吐量則可以高效率地利用CPU時間,儘快完成運算的任務;

主要適合在後臺計算而不需要太多交互的任務;

(3)、覆蓋區(Footprint)

在達到前面兩個目標的情況下,儘量減少堆的內存空間;

可以獲得更好的空間局部性;

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