1. 程式人生 > >JVM理論:(二/4)理解GC日誌、垃圾收集器參數總結

JVM理論:(二/4)理解GC日誌、垃圾收集器參數總結

相關 serial inf 說明 test 日誌 虛擬機啟動 cool 收集

JVM的GC日誌的主要參數包括如下幾個:
-XX:+PrintGC 輸出GC日誌
-XX:+PrintGCDetails 輸出GC的詳細日誌
-XX:+PrintGCTimeStamps 輸出GC的時間戳(以基準時間的形式)
-XX:+PrintGCDateStamps 輸出GC的時間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在進行GC的前後打印出堆的信息
-XX:+PrintGCApplicationStoppedTime // 輸出GC造成應用暫停的時間
-Xloggc:../logs/gc.log 日誌文件的輸出路徑

GC日誌

  每一種收集器的日誌格式都可以不同,但基本上都維持了一定的共性,以下兩段GC日誌為例:

33.125:[GC[DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680 secs]
100.667:[FullGC[Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K(21248K)],0.0150007 secs][Times:user=0.01 sys=0.00,real=0.02 secs]

  最前面的數字“33.125:”和“100.667:”代表了GC發生的時間,這個數字的含義是從Java虛擬機啟動以來經過的秒數。

  開頭的“[GC”和“[Full GC”說明了這次垃圾收集的停頓類型,而不是用來區分新生代GC還是老年代GC的。如果有“Full”,說明這次GC是發生了Stop-The-World的,例如下面這段新生代收集器ParNew的日誌也會出現“[Full GC”(這一般是因為出現了分配擔保失敗之類的問題,所以才導致STW)。如果是調用System.gc()方法所觸發的收集,那麽在這裏將顯示“[Full GC(System)”。

[Full GC 283.736:[ParNew:261599K->261599K(261952K),0.0000288 secs]

  接下來的“[DefNew”、“[Tenured”、“[Perm”表示GC發生的區域,這裏顯示的區域名稱與使用的GC收集是密切相關的。

  Serial收集器中的新生代名為“Default New Generation”,所以顯示的是“[DefNew”。

  ParNew收集器,新生代名稱就會變為“[ParNew”,意為“Parallel New Generation”。

  Parallel Scavenge收集器,新生代稱為“PSYoungGen”,老年代和永久代同理,名稱也是由收集器決定的。

  可參考:http://www.cnblogs.com/mikevictor07/p/5024645.html?utm_source=tuicool&utm_medium=referral

  後面方括號內部的“3324K->152K(3712K)”含義是“GC前該內存區域已使用容量->GC後該內存區域已使用容量(該內存區域總容量)”。 而在方括號之外的“3324K->152K(11904K)”表示“GC前Java堆已使用容量->GC後Java堆已使用容量(Java堆總容量)”。

  再往後,“0.0025925 secs”表示該內存區域GC所占用的時間,單位是秒。

內存各區域分配日誌

Heap  
  def new generation   total 9216K, used 4326K    //年輕代   
  eden space 8192K,  51% used
  from space 1024K,  14% used  
  to space 1024K,   0% used
  tenured generation   total 10240K, used 6144K    //老年代  
  the space 10240K,  60% used
  compacting perm gen  total 12288K, used 2114K    //永久代(方法區)  
  the space 12288K,  17% used

垃圾收集器參數總結

   技術分享圖片

  技術分享圖片

參考鏈接:

  https://blog.csdn.net/column/details/14851.html

  https://blog.csdn.net/baidu_33116785/article/details/53258822

JVM理論:(二/4)理解GC日誌、垃圾收集器參數總結