jstat 是 JVM 統計信息監視工具,如下:

我通過 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。
