天天看點

通過 jstat -gcutil 來學習JVM 記憶體配置設定政策與 GC 發生時機

jstat 是 JVM 統計資訊監視工具,如下:

通過 jstat -gcutil 來學習JVM 記憶體配置設定政策與 GC 發生時機

我通過 jstat 來監視1192的Java程序統計資訊,各項監視參數:

S0、S1 代表兩個Survivor區;

E 代表 Eden 區;

O(Old)代表老年代;

P(Permanent)代表永久代;

YGC(Young GC)代表Minor GC;

YGCT代表Minor GC耗時;

FGC(Full GC)代表Full GC耗時;

GCT代表Minor & Full GC共計耗時。

Java 堆分為新生代和老年代,新生代一般劃分為三塊區域,Eden + From Survivor + To Survivor,Eden 和 Survivor 的記憶體比為8:1,每次隻使用一個Eden 和一個 Survivor 區域,另一個 Survivor 用于複制收集算法回收記憶體。

對象一般盡量配置設定到新生代中,而對于大對象(長字元串和大數組)直接配置設定在老年代中,同時“年齡”長的的對象會從新生代自動晉升到老年代中。

Java 方法區稱為永久代,隻有 HotSpot 虛拟機才存在永久代。

當 Eden 區域配置設定不足時,自動發生一次 Minor GC。

當發生 Minor GC 時,虛拟機會自動檢測(比較)新生代晉升到老年代的對象記憶體大小和老年代剩餘記憶體大小,如果晉升>剩餘,則發生一次Full GC;如果晉升<剩餘,則去檢測老年代的記憶體擔保 HandlePromotionFailure 是否允許擔保失敗,如果不允許擔保失敗,則發生一次Full GC,如果允許失敗,則進行一次Minor GC。

//*************************************************************************************

JDK之jstat的用法