1. 程式人生 > >JVM垃圾收集器-Parallel Scavenge收集器

JVM垃圾收集器-Parallel Scavenge收集器

tail 開關 復制 tails 分別是 虛擬 回收 article 原創

今天我給大家講講JVM垃圾收集器-Parallel Scavenge收集器

Parallel Scavenge收集器

? ? ? ?Parallel Scavenge收集器也是一個新生代收集器,它也是使用復制算法的收集器,又是並行的多線程收集器,看上去和ParNew都一樣,那它有什麽特別之處呢?

? ? ??Parallel Scavenge收集器的特點是它的關註點與其他收集器不同,CMS等收集器的關註點盡可能地縮短垃圾收集時用戶線程的停頓時間,而Parallel Scavenge收集器的目標是達到一個可控制的吞吐量。所謂吞吐量就是CPU用於運行用戶代碼的時間與CPU總消耗時間的比值,即吞吐量=運行用戶代碼時間/(運行用戶代碼時間+垃圾收集時間),如果虛擬機總共運行需要100分鐘,其中垃圾收集花掉1分鐘,那吞吐量就是99%。

? ? ?停頓時間越短就越適合需要與用戶交互的程序,良好的響應速度能提升用戶的體驗;而高吞吐量則可用最高效率地利用CPU時間,盡快地完成程序的運算任務,主要適合在後臺運算而不需要太多交互的任務。

? ? ?Parallel Scavenge收集器提供了兩個參數用戶精確控制吞吐量,分別是控制最大垃圾收集停頓時間的-XX:MaxGCPauseMillis參 數及直接設置吞吐量大小的-XX:GCTimeRatio參數。

? ? ?MaxGCPauseMillis參數允許的值是一個大於0的毫秒數,收集器將盡力保證內存回收花費的時間不超過設定值。不過大家不要異想天開地認為如果把這個參數的值設置得稍小一點就能使得系統的垃圾收集速度變得更快,GC停頓時間縮短是以犧牲吞吐量和新生代空間來換取的:系統把新生代調小一些,收集300MB新生代肯定比收集500MB快吧,這也直接導致垃圾收集發生得更頻繁一些,原來10秒收集一次、每次停頓100毫秒,現在變成5秒收集一次、每次停頓70毫秒。停頓時間的確在下降,但吞吐量也降下來了。

? ? ?GCTimeRatio參數的值應當是一個大於0小於100的整數,也就是垃圾收集時間占總時間的比率,相當於是吞吐量的倒數。如果把此參數設置為19,那允許的最大GC時間就占總時間的5%,默認值為99,就是允許最大1%的垃圾收集時間。

? ? ?由於與吞吐量關系密切,Parallel Scavenge收集器也經常被稱為“吞吐量優先”收集器。除上述兩個參數之外,Parallel Scavenge收集器還有一個參數 -XX:+UseAdaptiveSizePolicy值得關註。這是一個開關參數,當這個參數打開之後,就不需要手工指定新生代的大小(-Xmn)、Eden與Survivor區的比例(-XX:SurvivorRatio)、晉升老年代對象年齡(-XX:PretenureSizeThreshold)等細節參數了,虛擬機會根據當前系統的運行情況收集性能監控信息,動態調整這些參數以提供最合適的挺短時間或最大的吞吐量,這個調節方式稱為GC自適應的調節策略。? ? ? ? ? ?


作者:柯之夢
來源:CSDN
原文:https://blog.csdn.net/yin4302008/article/details/86411019
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

JVM垃圾收集器-Parallel Scavenge收集器