天天看點

拜托,别再問我GC垃圾回收日志怎麼看了

日志的重要性,不需要過多強調了。通過日志,我們可以發現程式可能有記憶體(洩露)問題。本文從案例出發,具體介紹這些日志資訊,以期幫助大家更好地了解垃圾回收的運作情況。

還是先上圖,看看本文的主要内容:

拜托,别再問我GC垃圾回收日志怎麼看了

我們先來看個案例,代碼如下:

啟動參數設定:

<code>XX:+PrintGCDetails</code>

運作main方法,輸出

關于GC日志的參數

參數解釋:

<code>-XX:+PrintGCDetails</code> 啟用日志 <code>-XX:-UseAdaptiveSizePolicy</code> 禁用動态調整,使<code>SurvivorRatio</code>可以起作用 <code>-XX:SurvivorRatio=8</code>設定<code>Eden:Survivior</code>=8:1 <code>-XX:NewSize=10M -XX:MaxNewSize=10M</code>設定整個新生代的大小為<code>10M</code>

寫了一個Spring Boot項目,非常簡單的項目,裡面寫了一個controller

這段代碼其實是想後面示範<code>OOM</code>用的,都行吧,這裡先用他來看看<code>GC</code>垃圾回收日志。

在IDEA中設定

拜托,别再問我GC垃圾回收日志怎麼看了

輸出結果

拜托,别再問我GC垃圾回收日志怎麼看了

抓出一段來聊聊

(Allocation Failure):表明本次引起<code>GC</code>的原因是因為在年輕代中沒有足夠的空間能夠存儲新的資料了。 <code>PSYoungGen</code>:表示是<code>GC</code>類型 <code>8525K</code>:<code>YoungGC</code>前新生代記憶體占用 <code>352K</code>:<code>YoungGC</code>新生代記憶體占用 9216K:新生代總共大小 98695K:YoungGC前JVM記憶體占用 98486K:YoungGC後JVM記憶體使用 130048K:JVM堆總大小 <code>0.0092873 secs</code>:<code>YoungGC</code>耗時 <code>user=0.00</code>:<code>YoungGC</code>使用者耗時 <code>sys=0.00</code>:<code>YoungGC</code>系統耗時 real=<code>0.01:YoungGC</code>實際耗時(這裡居然四舍五入了)
<code>PSYoungGen: 8051K-&gt;7817K(9216K)</code>:新生代區<code>GC</code>前後和總大小 <code>ParOldGen: 244969K-&gt;244969K(245760K)</code>:老年代<code>GC</code>前後和大小。 <code>253020K-&gt;252786K(254976K)</code>:堆<code>GC</code>前後記憶體占用情況。 <code>Metaspace: 29386K-&gt;29386K(1077248K)</code>:元空間<code>GC</code>前後和總大小 後面那幾項和上面一樣

GC垃圾回收日志就是這麼簡單麼~藍(nan)不藍(nan)?