JVM

关于GC之六-一些命令

2019-01-31  本文已影响1人  AlanKim

查看当前堆中对象信息

jmap - histo pid > map.all
jmap -histo:live pid > map.live

jstat -gcutil

jstat -gcutil -h 10 8894 1000
-h 每隔10行 打印一次头信息
8894: pid
1000: 1000毫秒,表示1秒

➜  ~ jstat -gcutil -h 10 8894 1000
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00   2.27  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.27  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.27  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.27  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.38  47.28  93.36  91.27    470    6.063    87   29.323   35.386
  0.00   0.00   2.42  47.28  93.36  91.27    470    6.063    87   29.323   35.386

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共计耗时。
CCS:压缩使用比例
M:元空间(MetaspaceSize)已使用的占当前容量百分比

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。

参考资料:https://www.ibm.com/developerworks/cn/java/j-lo-JVMGarbageCollection/

上一篇下一篇

猜你喜欢

热点阅读