在上一篇文章中,我們通過代碼運行結果,查看到JVM的堆內存邏輯上分區是三部分,物理上分區是2部分,以及是新生代分區三部分,佔比分布是8/1/1。而且我們還通過代碼和堆JVM參數配置,製造出了OOM異常。下面我們就來分析GC回收器的日誌信息。
先來看看,OOM後,GC詳細日誌信息:
新生區的伊甸園區GC日誌分析
新生區的Eden區的GC,叫法:GC或者是YGC或者是MinorGC或者是輕GC
我們複製一條來分析:
分段說明:
:GC的類型;:YongGC前新生代的內存佔用量:YoungGC後新生代的內存佔用量;:新生代總內存大小;:YoungGC前JVM堆內存佔用量;:YoungGc後JVM堆內存使用量;:JVM堆內存總大小;:YoungGC耗時:YoungGC用戶耗時;:YoungGC系統耗時:YoungGC實際耗時年老代GC日誌分析:
年老代GC的叫法:Full GC或者FGC或者MajorGC或者重GC
同樣,我們拿出OOM之前的一條GC日誌進行分析
[Full GC (Ergonomics①) [PSYoungGen②: 96K③->0K④ (2048K⑤)] [ParOldGen⑥: 5094K⑦->4007K⑧ (5632K⑨)] 5190K⑩->4007K十一 (7680K十二), [Metaspace十三: 3314K十四 ->3314K 十五(1056768K十六)], 0.0074234 secs十七] [Times: user=0.08十八 sys=0.01十九, real=0.01 secs二十]:
標誌說明:
:GC類型:Young區:GC前Young區內存佔用:GC後Young區內存佔用:Young區總大小:Old區:GC前Old區內存佔用:GC後Old區內存佔用:Old區總大小:GC前堆內存佔用:GC後堆內存佔用:JVM堆內存總大小:元空間區:GC前佔用內存:GC後佔用內存:元空間總大小:GC耗時:用戶耗時:系統耗時:實際耗時如下圖:
接下來,我們繼續學習的是JVM垃圾回收的四種算法了。歡迎大家和凱哥(凱哥Java:kaigejava)繼續一起學習:引用計數算法、複製算法、標記清除、標記壓縮這四種算法。