日志的重要性,不需要過多強調了。通過日志,我們可以發現程式可能有記憶體(洩露)問題。本文從案例出發,具體介紹這些日志資訊,以期幫助大家更好地了解垃圾回收的運作情況。
還是先上圖,看看本文的主要内容:
我們先來看個案例,代碼如下:
啟動參數設定:
<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中設定
輸出結果
抓出一段來聊聊
(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->7817K(9216K)</code>:新生代區<code>GC</code>前後和總大小 <code>ParOldGen: 244969K->244969K(245760K)</code>:老年代<code>GC</code>前後和大小。 <code>253020K->252786K(254976K)</code>:堆<code>GC</code>前後記憶體占用情況。 <code>Metaspace: 29386K->29386K(1077248K)</code>:元空間<code>GC</code>前後和總大小 後面那幾項和上面一樣
GC垃圾回收日志就是這麼簡單麼~藍(nan)不藍(nan)?