並行收集器

2022-09-15 05:00:11 字數 1339 閱讀 4205

預設情況下伺服器上選擇並行收集器。

1、並行收集器(這裡也稱為吞吐量收集器)是類似於序列收集器的分代收集器; 主要區別在於多個執行緒用於加速垃圾收集。使用命令列選項啟用並行收集器-xx:+useparallelgc。

2、可以使用命令列選項控制垃圾收集器執行緒的數量 -xx:parallelgcthreads=12

3、對於並行收集器,j**a se提供了垃圾收集調整引數,滿足的順序為從高到低:最大暫停時間》吞吐量》最小堆空間

最大暫停時間目標:

-xx:maxgcpausemillis=500

暫停時間是垃圾收集器停止應用程式並恢復不再使用的空間的持續時間。

最大暫停時間是限制暫停的最長時間。

垃圾收集器將調整j**a堆大小以及與垃圾收集相關的其他引數,以嘗試使垃圾收集暫停時間短於maxgcpausemilli配置的毫秒。這些調整可能會導致垃圾收集器更頻繁地發生,從而降低了應用程式的整體吞吐量

應用程式吞吐量目標:

-xx:gctimeratio=5

吞吐量目標是根據垃圾**所花費的時間和垃圾收集之外所花費的時間(稱為應用程式時間)來衡量的。例如:gc時間為1,非gc時間為19,這吞吐量=1/(1+19)=5%,設定gctimeratio=5。

堆占用空間:

-xmx

4、堆調整

調整堆是按照每次20%增長,按照每次5%收縮

可以通過選擇進行配置:

young區增長量:-xx:younggenerationsizeincrement=

old區增長量:-xx:tenuredgenerationsizeincrement=

收縮量:x/d,-xx:adaptivesizedecrementscalefactor=

5、伺服器jvm預設初始和最大堆大小

32位jvm上,如果有4 gb或更多物理記憶體,則預設最大堆大小最多可達1 gb

64位jvm上,如果存在128 gb或更多物理記憶體,則預設最大堆大小最多可為32 gb

6、指定初始和最大堆大小

使用-xms設定初始化大小、-xmx設定最大堆

如果明確知道應用程式需要的堆大小,可以-xms與-xmx設定相同值

如果不知道,可以設定-xms初始化堆大小,然後jvm自己控制堆大小以達到堆使用和效能之前的平衡。

gc時間為young區gc+old區gc時間之和。

如果吞吐量和最大暫停時間已經滿了,那麼垃圾**器將減少堆得大小直到不能滿足兩個目標中的乙個為止。

如果不確定應用程式需要堆的最大值,就不用設定最大堆值,從而滿足應用的最大吞吐量目標。

jvm將控制堆的大小以滿足吞吐量目標。

當垃圾**期試圖滿足吞吐量和最大暫停時間兩個目標時,堆的大小可能頻繁變動。

並行收集器相關引數

xx useparallelgc 選擇垃圾收集器為並行收集器,此配置僅對年輕代有效,年輕代使用併發收集 而年老代扔使用序列收集 xx useparnewgc 設定年輕代為並行收集,可與cms收集同時使用。無需設定此值,jvm會根據 系統配置自行設定 xx parallelgcthreads 並行收集...

JVM垃圾收集器之CMS收集器

cms concurrent mark sweep 收集器是一種以獲取最短 停頓時間為目標的收集器。1 cms使用的演算法 cms使用的演算法為 標記 清除 演算法 2 執行過程4步驟 a 初始標記 cms initial mark b 併發標記 cms concurrent mark c 重新標記...

垃圾收集器(五) G1收集器

初始標記,標記gc roots直接關聯的物件,新增tams標記 兩個指標 stw 併發標記,從gc roots沿著引用關係查詢,如果使用者執行緒同時修改了引用關係,新增satb標記 此時的新物件分配到tams標記之外的區域 併發。最終標記 處理satb標記,stw 篩選 按照 價值進行 對於乙個re...