補充:堆內(nèi)存是指JVM的內(nèi)存大小包括堆區(qū)和非堆區(qū)取董;
-server 服務器模式運行秃臣,-client表示客戶端運行模式;
-Xms2G 最小JVM內(nèi)存2G唤殴,是JVM的堆區(qū)的大小,不包括PermGen到腥;
-Xmx3G 最大JVM內(nèi)存3G朵逝,是JVM的堆區(qū)的大小,不包括PermGen乡范;
-Xmn1G 指定JVM堆區(qū)中新生代的初始化大小為1G配名;
What(是什么)
Parallel Scavenge收集器是Java虛擬機中垃圾收集器的一種啤咽。
又稱為吞吐量優(yōu)先收集器,和ParNew收集器類似段誊,是一個新生代收集器闰蚕。使用復制算法的并行多線程收集器。Parallel Scavenge是Java1.8默認的收集器连舍,特點是并行的多線程回收没陡,以吞吐量優(yōu)先。
Why(為什么)
1.主要特點
Parallel Scavenge收集器的關注點與其他收集器不同索赏, Parallel Scavenge收集器的目標則是達到一個可控制的吞吐量(Throughput)
(吞吐量=運行用戶代碼時間/(運行用戶代碼時間+垃圾收集時間))
2.使用場景
Parallel Scavenge收集器的高吞吐量可以最高效率的利用CPU時間盼玄,盡快的完成程序的運算任務等,主要適合在后臺運算而不是太多交互的任務(其不適合需要與用戶交互的程序潜腻,良好的響應速度能提升用戶的體驗埃儿,此種場景CMS效果更好)。
How(怎么做)
1. 重要參數(shù)
重要的參數(shù)有三個融涣,其中兩個參數(shù)用于精確控制吞吐量童番,分別是
1.1. 控制最大垃圾收集停頓時間的-XX:MaxGCPauseMillis參數(shù)
MaxGCPauseMillis參數(shù)允許的值是一個大于0的毫秒數(shù),收集器將盡力保證內(nèi)存回收花費的時間不超過設定值威鹿。不過大家不要異想天開地認為如果把這個參數(shù)的值設置得稍小一點就能使得系統(tǒng)的垃圾收集速度變得更快剃斧,GC停頓時間縮短是以犧牲吞吐量和新生代空間來換取的:系統(tǒng)把新生代調(diào)小一些,收集300MB新生代肯定比收集500MB快吧忽你,這也直接導致垃圾收集發(fā)生得更頻繁一些幼东,原來10秒收集一次、每次停頓100毫秒科雳,現(xiàn)在變成5秒收集一次根蟹、每次停頓70毫秒。停頓時間的確在下降糟秘,但吞吐量也降下來了简逮。1.2. 直接設置吞吐量大小的 -XX:GCTimeRatio參數(shù)。
GCTimeRatio參數(shù)的值應當是一個大于0小于100的整數(shù)尿赚,也就是垃圾收集時間占總時間的比率买决。如果把此參數(shù)設置為19,那允許的最大GC時間就占總時間的5%(即1 /(1+19))吼畏,默認值為99督赤,就是允許最大1%(即1 /(1+99))的垃圾收集時間。1.3. UseAdaptiveSizePolicy開關參數(shù)泻蚊。
-XX:+UseAdaptiveSizePolicy是一個開關參數(shù)躲舌,當這個參數(shù)打開之后,就不需要手工指定新生代的大行孕邸(-Xmn)没卸、Eden與Survivor區(qū)的比例(-XX:SurvivorRatio)羹奉、晉升老年代對象年齡(-XX:PretenureSizeThreshold)等細節(jié)參數(shù)了,虛擬機會根據(jù)當前系統(tǒng)的運行情況收集性能監(jiān)控信息约计,動態(tài)調(diào)整這些參數(shù)以提供最合適的停頓時間或最大的吞吐量诀拭,這種調(diào)節(jié)方式稱為GC自適應的調(diào)節(jié)策略(GC Ergonomics)。1.4. GC Ergonomics:表示GC的自適應調(diào)節(jié)策略煤蚌,其中Ergonomics單詞表示工效學耕挨,人體工程學的意思。
2. 自適應調(diào)節(jié)策略
Parallel Scavenge收集器能夠配合自適應調(diào)節(jié)策略尉桩,把內(nèi)存管理的調(diào)優(yōu)任務交給虛擬機去完成筒占。只需要把基本的內(nèi)存數(shù)據(jù)設置好(如-Xmx設置最大堆),然后使用-XX:MaxGCPauseMillis參數(shù)(更關注最大停頓時間)或GCTimeRatio參數(shù)(更關注吞吐量)給虛擬機設立一個優(yōu)化目標蜘犁,那具體細節(jié)參數(shù)的調(diào)節(jié)工作就由虛擬機完成了翰苫。
自適應調(diào)節(jié)策略也是Parallel Scavenge收集器與ParNew收集器的一個重要區(qū)別。
-XX:-UseParallelGC 和 -XX:+UseParallelOldGC
Parallel New參考
使用方式:-XX:+UseParallelGC強制使用該收集器这橙,打開該收集器后奏窑,將使用Parallel Scavenge(年輕代)+Serial Old(老年代)的組合進行GC。
Parallel Old參考:是Parallel Scavenge收集器的老年代版本屈扎,用于老年代的垃圾回收埃唯,但與Parallel Scavenge不同的是,它使用的是“標記-整理算法”助隧。
適用于注重于吞吐量及CPU資源敏感的場合筑凫。
使用方式:-XX:+UseParallelOldGC滑沧,打開該收集器后并村,將使用Parallel Scavenge(年輕代)+Parallel Old(老年代)的組合進行GC。
補充
[GC[PSYoungGen 表示用的是年輕代使用Parallel Scavenge收集器滓技。
[GC[ParNew 表示使用的是年輕代使用ParNew收集器(Parallel New收集器)哩牍。
[GC[DefNew 表示用的是年輕代使用Serial收集器(Serial New收集器)。
[GC[PSOldGen 表示用的是老年代使用的Parallel Old收集器令漂。
JVM的GC日志的主要參數(shù)包括如下幾個:
-XX:+PrintGC 輸出GC日志
-XX:+PrintGCDetails 輸出GC的詳細日志
-XX:+PrintGCTimeStamps 輸出GC的時間戳(以基準時間的形式)
-XX:+PrintGCDateStamps 輸出GC的時間戳(以日期的形式膝昆,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在進行GC的前后打印出堆的信息
-XX:+PrintGCApplicationStoppedTime // 輸出GC造成應用暫停的時間
-Xloggc:../logs/gc.log 日志文件的輸出路徑