GC之Parallel Scavenge收集器

補(bǔ)充:堆內(nèi)存是指JVM的內(nèi)存大小包括堆區(qū)和非堆區(qū);
-server 服務(wù)器模式運(yùn)行,-client表示客戶端運(yùn)行模式;
-Xms2G 最小JVM內(nèi)存2G,是JVM的堆區(qū)的大小,不包括PermGen;
-Xmx3G 最大JVM內(nèi)存3G,是JVM的堆區(qū)的大小,不包括PermGen;
-Xmn1G 指定JVM堆區(qū)中新生代的初始化大小為1G;

What(是什么)

Parallel Scavenge收集器是Java虛擬機(jī)中垃圾收集器的一種。
又稱為吞吐量優(yōu)先收集器,和ParNew收集器類似,是一個(gè)新生代收集器。使用復(fù)制算法的并行多線程收集器。Parallel Scavenge是Java1.8默認(rèn)的收集器,特點(diǎn)是并行的多線程回收,以吞吐量優(yōu)先。

Why(為什么)

1.主要特點(diǎn)

Parallel Scavenge收集器的關(guān)注點(diǎn)與其他收集器不同, Parallel Scavenge收集器的目標(biāo)則是達(dá)到一個(gè)可控制的吞吐量(Throughput)
(吞吐量=運(yùn)行用戶代碼時(shí)間/(運(yùn)行用戶代碼時(shí)間+垃圾收集時(shí)間))

2.使用場景

Parallel Scavenge收集器的高吞吐量可以最高效率的利用CPU時(shí)間,盡快的完成程序的運(yùn)算任務(wù)等,主要適合在后臺(tái)運(yùn)算而不是太多交互的任務(wù)(其不適合需要與用戶交互的程序,良好的響應(yīng)速度能提升用戶的體驗(yàn),此種場景CMS效果更好)。

How(怎么做)

1. 重要參數(shù)

重要的參數(shù)有三個(gè),其中兩個(gè)參數(shù)用于精確控制吞吐量,分別是

  • 1.1. 控制最大垃圾收集停頓時(shí)間的-XX:MaxGCPauseMillis參數(shù)
    MaxGCPauseMillis參數(shù)允許的值是一個(gè)大于0的毫秒數(shù),收集器將盡力保證內(nèi)存回收花費(fèi)的時(shí)間不超過設(shè)定值。不過大家不要異想天開地認(rèn)為如果把這個(gè)參數(shù)的值設(shè)置得稍小一點(diǎn)就能使得系統(tǒng)的垃圾收集速度變得更快,GC停頓時(shí)間縮短是以犧牲吞吐量和新生代空間來換取的:系統(tǒng)把新生代調(diào)小一些,收集300MB新生代肯定比收集500MB快吧,這也直接導(dǎo)致垃圾收集發(fā)生得更頻繁一些,原來10秒收集一次、每次停頓100毫秒,現(xiàn)在變成5秒收集一次、每次停頓70毫秒。停頓時(shí)間的確在下降,但吞吐量也降下來了。

  • 1.2. 直接設(shè)置吞吐量大小的 -XX:GCTimeRatio參數(shù)。
    GCTimeRatio參數(shù)的值應(yīng)當(dāng)是一個(gè)大于0小于100的整數(shù),也就是垃圾收集時(shí)間占總時(shí)間的比率。如果把此參數(shù)設(shè)置為19,那允許的最大GC時(shí)間就占總時(shí)間的5%(即1 /(1+19)),默認(rèn)值為99,就是允許最大1%(即1 /(1+99))的垃圾收集時(shí)間。

  • 1.3. UseAdaptiveSizePolicy開關(guān)參數(shù)。
    -XX:+UseAdaptiveSizePolicy是一個(gè)開關(guān)參數(shù),當(dāng)這個(gè)參數(shù)打開之后,就不需要手工指定新生代的大?。?Xmn)、Eden與Survivor區(qū)的比例(-XX:SurvivorRatio)、晉升老年代對(duì)象年齡(-XX:PretenureSizeThreshold)等細(xì)節(jié)參數(shù)了,虛擬機(jī)會(huì)根據(jù)當(dāng)前系統(tǒng)的運(yùn)行情況收集性能監(jiān)控信息,動(dòng)態(tài)調(diào)整這些參數(shù)以提供最合適的停頓時(shí)間或最大的吞吐量,這種調(diào)節(jié)方式稱為GC自適應(yīng)的調(diào)節(jié)策略(GC Ergonomics)。

  • 1.4. GC Ergonomics:表示GC的自適應(yīng)調(diào)節(jié)策略,其中Ergonomics單詞表示工效學(xué),人體工程學(xué)的意思。

2. 自適應(yīng)調(diào)節(jié)策略

Parallel Scavenge收集器能夠配合自適應(yīng)調(diào)節(jié)策略,把內(nèi)存管理的調(diào)優(yōu)任務(wù)交給虛擬機(jī)去完成。只需要把基本的內(nèi)存數(shù)據(jù)設(shè)置好(如-Xmx設(shè)置最大堆),然后使用-XX:MaxGCPauseMillis參數(shù)(更關(guān)注最大停頓時(shí)間)或GCTimeRatio參數(shù)(更關(guān)注吞吐量)給虛擬機(jī)設(shè)立一個(gè)優(yōu)化目標(biāo),那具體細(xì)節(jié)參數(shù)的調(diào)節(jié)工作就由虛擬機(jī)完成了。
自適應(yīng)調(diào)節(jié)策略也是Parallel Scavenge收集器與ParNew收集器的一個(gè)重要區(qū)別。

-XX:-UseParallelGC 和 -XX:+UseParallelOldGC

Parallel New參考

使用方式:-XX:+UseParallelGC強(qiáng)制使用該收集器,打開該收集器后,將使用Parallel Scavenge(年輕代)+Serial Old(老年代)的組合進(jìn)行GC。

Parallel Old參考:是Parallel Scavenge收集器的老年代版本,用于老年代的垃圾回收,但與Parallel Scavenge不同的是,它使用的是“標(biāo)記-整理算法”。
適用于注重于吞吐量及CPU資源敏感的場合。

使用方式:-XX:+UseParallelOldGC,打開該收集器后,將使用Parallel Scavenge(年輕代)+Parallel Old(老年代)的組合進(jìn)行GC。

補(bǔ)充

[GC[PSYoungGen 表示用的是年輕代使用Parallel Scavenge收集器。
[GC[ParNew 表示使用的是年輕代使用ParNew收集器(Parallel New收集器)。
[GC[DefNew 表示用的是年輕代使用Serial收集器(Serial New收集器)。
[GC[PSOldGen 表示用的是老年代使用的Parallel Old收集器。

JVM的GC日志的主要參數(shù)包括如下幾個(gè):

-XX:+PrintGC 輸出GC日志
-XX:+PrintGCDetails 輸出GC的詳細(xì)日志
-XX:+PrintGCTimeStamps 輸出GC的時(shí)間戳(以基準(zhǔn)時(shí)間的形式)
-XX:+PrintGCDateStamps 輸出GC的時(shí)間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在進(jìn)行GC的前后打印出堆的信息
-XX:+PrintGCApplicationStoppedTime // 輸出GC造成應(yīng)用暫停的時(shí)間
-Xloggc:../logs/gc.log 日志文件的輸出路徑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、GC收集器的分類: 按線程分為串行收集器和并行收集器,串行使用一個(gè)線程進(jìn)行回收操作,并行使用多個(gè)線程進(jìn)行回收,...
    城市里永遠(yuǎn)的學(xué)習(xí)者閱讀 1,295評(píng)論 0 48
  • Java和C++之間有一堵由內(nèi)存動(dòng)態(tài)分配和垃圾收集技術(shù)所圍成的“高墻”,墻外面的人想進(jìn)來,墻里面的人想出來。 對(duì)象...
    胡二囧閱讀 1,328評(píng)論 0 4
  • 如果說垃圾收集算法是內(nèi)存回收的方法論,垃圾收集器就是內(nèi)存回收的具體實(shí)現(xiàn)。Java虛擬機(jī)規(guī)范中對(duì)垃圾收集器應(yīng)該如何實(shí)...
    平頭哥2015閱讀 310評(píng)論 0 0
  • 概念理解新生代收集器Serial收集器ParNew收集器Parallel Scavenge收集器老年代收集器Ser...
    懶癌正患者閱讀 286評(píng)論 0 0
  • 周二早上,身體不適,就請(qǐng)了半天假。正好遇到保潔阿姨,來家里做清潔,就聊了聊,發(fā)現(xiàn)了一些她工作上和生活上的事情。 我...
    德川亮閱讀 1,098評(píng)論 4 3

友情鏈接更多精彩內(nèi)容