理解GC日誌

理解GC日誌

PS : 本文乃學習整理參考而來


以下是案例輸出:

33.125:[GC[DefNew:3324K->152K(3712K),0.0025925 secs] 3324K->152K(11904K),0.0031680 secs]

100.667:[Full GC[Tenured:0K->210K(10240K),0.0149142 secs] 4603K->210K(19456K),[Perm:2999K->2999K(21248K)],
0.015007 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)。
[Full GC 283.736:[ParNew:261599K->261599K(261952K),0.0000288 secs]]

接下來的“[DefNew”、“[Tenured”、“[Perm”表示GC發生的區域,這裏顯示的區域名稱與使用的GC收集器是密切相關的,例如上面所使用的Serail收集器中新生代名爲“Default New Generation”,所以顯示的是“[DefNew”。如果是ParNew收集器,新生代名稱變爲“[ParNew”,意味“Parallel New Generation”。如果採用Parallel Scavenge收集器,那它配套的新生代爲“PSYoungGen”

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

有的收集器會給出更具體時間數據。如:“[Times:user=0.01 sys=0.00 ,real=0.02 secs]”這裏面的user、sys、real與Linux的time命令說輸出的時間含義一致,分別代表用戶態消耗的CPU時間內核態消耗的CPU時間操作從開始到結束所經過的牆鍾(Wall Clock Time)。


發佈了41 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章