歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java垃圾收集器之概說

1、垃圾收集器的組合

JAVA垃圾收集器一共有7個,減去還沒有正式大規模使用的G1,還有6個,其中新生代3個,老生代3個。

因為垃圾收集器都是一組一組的工作,這6個收集器一共構成了5中使用模式。

參數

描述

-XX:+UseSerialGC

Jvm運行在Client模式下的默認值,打開此開關後,使用Serial + Serial Old的收集器組合進行內存回收

-XX:+UseParNewGC

打開此開關後,使用ParNew + Serial Old的收集器進行垃圾回收

-XX:+UseConcMarkSweepGC

使用ParNew + CMS +  Serial Old的收集器組合進行內存回收,Serial Old作為CMS出現“Concurrent Mode Failure”失敗後的後備收集器使用。

-XX:+UseParallelGC

Jvm運行在Server模式下的默認值,打開此開關後,使用Parallel Scavenge +  Serial Old的收集器組合進行回收

-XX:+UseParallelOldGC

使用Parallel Scavenge +  Parallel Old的收集器組合進行回收

我自己閱讀周志明先生的著作《深入理解JAVA虛擬機》,其中3.4章節(55頁)有一張垃圾收集器的圖。其中新生代的serial收集器和老生代的CMS收集器,並沒有直接的調用方法,因此參考這塊的內容,我重新畫了一張圖,以便讓自己理解。

深入理解Java虛擬機:JVM高級特性與最佳實踐 第2版 高清PDF+源碼  下載見 http://www.linuxidc.com/linux/2014-09/106869.htm

2、垃圾收集器組合關系圖例

常用的6個垃圾收集器,由這五個方法進行調度和使用。

3、部分JVM參數

一些其他的JAVA虛擬機的參數,以便需要的時候查閱。

-XX:SurvivorRatio

新生代中Eden區域與Survivor區域的容量比值,默認為8,代表Eden:Subrvivor = 8:1

-XX:PretenureSizeThreshold

直接晉升到老年代對象的大小,設置這個參數後,大於這個參數的對象將直接在老年代分配

-XX:MaxTenuringThreshold

晉升到老年代的對象年齡,每次Minor GC之後,年齡就加1,當超過這個參數的值時進入老年代

-XX:UseAdaptiveSizePolicy

動態調整java堆中各個區域的大小以及進入老年代的年齡

-XX:+HandlePromotionFailure

是否允許新生代收集擔保,進行一次minor gc後, 另一塊Survivor空間不足時,將直接會在老年代中保留

-XX:ParallelGCThreads

設置並行GC進行內存回收的線程數

-XX:GCTimeRatio

GC時間占總時間的比列,默認值為99,即允許1%的GC時間,僅在使用Parallel Scavenge 收集器時有效

-XX:MaxGCPauseMillis

設置GC的最大停頓時間,在Parallel Scavenge 收集器下有效

-XX:CMSInitiatingOccupancyFraction

設置CMS收集器在老年代空間被使用多少後出發垃圾收集,默認值為68%,僅在CMS收集器時有效,-XX:CMSInitiatingOccupancyFraction=70

-XX:+UseCMSCompactAtFullCollection

由於CMS收集器會產生碎片,此參數設置在垃圾收集器後是否需要一次內存碎片整理過程,僅在CMS收集器時有效

-XX:+CMSFullGCBeforeCompaction

設置CMS收集器在進行若干次垃圾收集後再進行一次內存碎片整理過程,通常與UseCMSCompactAtFullCollection參數一起使用

-XX:+UseFastAccessorMethods

原始類型優化

-XX:+DisableExplicitGC

是否關閉手動System.gc

-XX:+CMSParallelRemarkEnabled

降低標記停頓

-XX:LargePageSizeInBytes

內存頁的大小不可設置過大,會影響Perm的大小,-XX:LargePageSizeInBytes=128m

4、JDK GC組合方式的一些特性

 

新生代GC方式

老年代和持久代GC方式

-XX:+UseSerialGC

Serial 串行GC

Serial Old 串行GC

-XX:+UseParallelGC

Parallel Scavenge  並行回收GC

Serial Old 串行GC

-XX:+UseConcMarkSweepGC

ParNew 並行GC

CMS 並發GC 
當出現“Concurrent Mode Failure”時
采用Serial Old 串行GC

-XX:+UseParNewGC

ParNew 並行GC

Serial Old 串行GC

-XX:+UseParallelOldGC

Parallel Scavenge  並行回收GC

Parallel Old 並行GC

-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC

Serial 串行GC

CMS 並發GC 
當出現“Concurrent Mode Failure”時
采用Serial Old 串行GC

Copyright © Linux教程網 All Rights Reserved