1. 程式人生 > >jstat檢視gc情況

jstat檢視gc情況

jstat通常用來分析系統的垃圾回收情況。

1)命令:

jstat -gccause pid 2000     #每格2秒輸出結果

jstat -gcutil pid 2000


2)分析:

  • S0S1 代表兩個Survivor區;
  • E 代表 Eden 區;
  • OOld)代表老年代;
  • PPermanent)代表永久代;
  • YGCYoung GC)代表Minor GC
  • YGCT代表Minor GC耗時;
  • FGCFull GC)代表Full GC耗時;
  • GCT代表Minor & Full GC共計耗時。

Java 堆分為新生代和老年代,新生代一般劃分為三塊區域,Eden + From Survivor + To Survivor

Eden Survivor 的記憶體比為8:1,每次只使用一個Eden 和一個 Survivor 區域,另一個Survivor 用於複製收集演算法回收記憶體。


物件一般儘量分配到新生代中,而對於大物件(長字串和大陣列)直接分配在老年代中,同時“年齡”長的的物件會從新生代自動晉升到老年代中。

Java 方法區稱為永久代,只有 HotSpot 虛擬機器才存在永久代。

首先想eden區申請分配空間,如果空間夠,就直接進行分配,否則進行一次Minor GCminor GC 首先會對Eden區的物件進行標記,標記出來存活的物件。然後把存活的物件copyFrom空間。如果From空間足夠,則回收

eden區可回收的物件。如果from記憶體空間不夠,則把From空間存活的物件複製到To區,如果TO區的記憶體空間也不夠的話,則把To區存活的物件複製到老年代。如果老年代空間也不夠(或者達到觸發老年年垃圾回收條件的話)則觸發一次full GC