1. 程式人生 > >讀懂JVM垃圾收集日誌

讀懂JVM垃圾收集日誌

日誌 例如 png 多核 .cn 運算 detail http 知識

JVM垃圾收集搞懂原理很重要,但是連垃圾收集的日誌都不懂,這tmd還分析個屁的問題啊,典型的空有理論知識,動手實踐為零。本篇就來具體的學習一下JVM中的垃圾收集日誌。

第一步,垃圾收集的選項

技術分享

圖1 JVM垃圾收集日誌選項

圖1中後面標有大拇指的是該圖作者的推薦選項。

-XX:+PrintGCDetails參數用於告訴虛擬機在發生垃圾收集行為時打印內存回收日誌,並且在進程退出的時候輸出當前內存的各區域分配情況。

  1. GC, Full GC說明了這次垃圾收集的停頓類型,而不是用來區分新生代GC還是老年代GC。如果有"Full",則表示這次GC發生了"Stop-The-World"。
  2. PSYoungGen, ParOldGen,PSPermGen表示GC發生的區域,這裏顯示的區域名稱與使用的GC收集器密切相關,不同收集器對於不同區域所顯示的名稱可能不同。
  3. 接下來"7307K->480K(9216K)"的含義是:GC前該內存區域已使用容量 -> GC後該內存區域已使用容量(該內存區域的總容量)
  4. "7307K->6624K(19456K)"的含義是:GC前Java堆已使用容量 -> GC後Java堆已使用容量(Java堆總容量) 。
  5. "0.0072860 secs" 表示該內存區域GC所占用的時間,單位是秒。
  6. [Times: user=0.01 sys=0.01, real=0.00 secs]:分別表示用戶態消耗CPU時間, 內核態消耗CPU時間,操作從開始到結束所經過的墻鐘時間。  

PS,CPU時間與墻鐘時間的區別是:墻鐘時間包括各種非運算的等待耗時,例如等待磁盤I/O、等待線程阻塞等;而CPU時間不包括這些耗時。當系統有多cpu或者多核的話,多線程操作會疊加這些CPU時間,所以有時看到user或sys時間超過real時間是完全正常的。

讀懂JVM垃圾收集日誌