[GC (Allocation Failure) [PSYoungGen: 5632K->496K(6144K)] 5632K->2985K(19968K), 0.0061449 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 6128K->512K(6144K)] 8617K->7656K(19968K), 0.0066923 secs] [Times: user=0.04 sys=0.01, real=0.00 secs]
[Full GC (Ergonomics) [PSYoungGen: 6144K->0K(6144K)] [ParOldGen: 10309K->12187K(13824K)] 16453K->12187K(19968K), [Metaspace: 3288K->3288K(1056768K)], 0.1817402 secs] [Times: user=0.33 sys=0.01, real=0.18 secs]
[Full GC (Ergonomics) [PSYoungGen: 4227K->2629K(6144K)] [ParOldGen: 12187K->13610K(13824K)] 16414K->16239K(19968K), [Metaspace: 3288K->3288K(1056768K)], 0.1551767 secs] [Times: user=0.39 sys=0.01, real=0.16 secs]
[Full GC (Allocation Failure) [PSYoungGen: 2629K->2629K(6144K)] [ParOldGen: 13610K->13592K(13824K)] 16239K->16222K(19968K), [Metaspace: 3288K->3288K(1056768K)], 0.0977081 secs] [Times: user=0.43 sys=0.01, real=0.10 secs]
複製代碼
GC日誌開頭的「[GC」和「[Full GC」說明了此次垃圾收集的停頓類型,而不是用來區分新生代GC仍是老年代GC的。若是有「full」,說明此次GC是發生了Stop The World的,例以下面這段新生代收集器ParNew的日誌也會出現「Full GC」,這通常是由於出現了分配擔保失敗之類的問題,因此才致使STW。若是是調用System.gc()方法所觸發的收集,那麼在這裏將顯示「[Full GC(System)」。linux
[Full GC 283.736:[ParNew:261599K->261599K(261952K),0.0000288 secs]
bash
接下來「[DefNew」、「[Tenured」、「[Perm」、「[PSYoungGen」表示GC發生的區域,這裏顯示的區域名稱與使用的GC收集器是密切相關的,例如Serial收集器爲「[DefNew」,ParNew收集器爲「[ParNew」,若是是Parallel Scavenge收集器,那它配套的新生代爲「PSYoungGen」,老年代和永久代同理,名稱也是由收集器決定的。多線程
後面方括號內部的「5632K->496K(6144K)」 含義是「GC前該內存區域已使用容量->GC後該內存區域已使用容量(該內存區域總容量)」。spa
而在方括號以外的「5632K->2985K(19968K)」表示「GC前Java堆已使用容量->GC後Java堆已使用容量(Java堆總容量)」線程
再日後,「0.0061449 secs」表示該內存區域GC所佔用的時間,單位是秒。「[Times: user=0.02 sys=0.00, real=0.00 secs] 」,這裏面的user、sys、和real與linux的time命令所輸出的時間含義一致,分別表明用戶態消耗的CPU時間、內核態消耗的CPU時間和操做從開始到結束所經歷過的牆鍾時間。CPU時間與牆鍾時間的區別是,牆鍾時間包括各類非運算的等待耗時,例如等待磁盤IO,等待線程阻塞,而CPU時間不包括這些耗時,但當系統有多CPU或者多核的話,多線程操做會疊加這些CPU時間,因此user或者sys時間超過real時間是徹底正常的。日誌
參數 | 描述 |
---|---|
UseSerial | 虛擬機運行在Client模式下的默認值,打開此開關後,使用Serial+Serial Old 的收集器組合進行內存回收 |
UseParNewGC | 打開此開關後,使用ParNew+Serial Old的收集器組合進行內存回收 |
UseConcMarkSweepGC | 打開此開關後,使用ParNew+CMS+Serial Old的收集器組合進行內存回收。Serial Old收集器將做爲CMS收集器出現Concurrent Mode Failure失敗後的後備收集器使用 |
UseParallelGC | 虛擬機運行在Server模式下的默認值,打開此開關後,使用Parallel Scavenge+Serial Old(Ps Mark Sweep)的收集器組合進行內存回收 |
UseParllelOldGC | 打開此開關後,使用Parallel Scavenge+Parallel Old 的收集器組合進行內存回收 |
SurvivorRatio | 新生代中Eden區域與Survivor區域的容量比值,默認爲8,表明Eden:Survivor = 8:1 |
PretenureSizeThreshold | 直接晉升到老年代的對象大小,設置這個參數後,大於這個參數的對象將直接在老年代分配 |
MaxTenuringThreshold | 晉升到老年代的對象年齡。每一個對象在堅持過一次Minor GC以後,年齡就+1,當超過這個參數值時就進入老年代 |
UseAdaptiveSizePolicy | 動態調整Java堆中各個區域的大小以及進入老年代的年齡 |
HandlePromotionFailure | 是否容許分配擔保失敗,即老年代的剩餘空間不足以應付新生代的整個Eden和Survivor區的全部對象都存活的極端狀況 |
ParallelGCThreads | 設置並行GC時進行內存回收的線程數 |
GCTimeRatio | GC時間佔總時間的比率,默認爲99,即容許1%的GC時間。僅在使用Parallel Scavenge收集器時生效 |
MaxGCPauseMillis | 設置GC的最大停頓時間。僅在使用Parallel Scavenge收集器時生效 |
CMSInitiatingOccupancyFraction | 設置CMS收集器在老年代空間被使用多少後觸發垃圾收集。默認值爲68%。僅在使用CMS收集器時生效 |
UseCmsCompactAtFullCollection | 設置CMS收集器在完成垃圾收集後是否要進行一次內存碎片整理。僅在使用CMS收集器時生效 |
CMSFullGCsBeforeCompaction | 設置CMS收集器在進行若干次垃圾收集後再啓動一次內存碎片整理。僅在使用CMS收集器時生效 |