【原创】通过 jstat -gcutil 来学习JVM 内存分配策略与 GC 发生时机
2012-07-25 16:27
288 查看
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。
我通过 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。
相关文章推荐
- 通过 jstat -gcutil 来学习JVM 内存分配策略与 GC 发生时机
- 【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出
- 三:JVM学习-内存分配以及回收策略
- JVM学习笔记三:垃圾收集器与内存分配策略
- jvm学习记录--06 垃圾回收对象内存分配策略
- 深入学习Java JVM - 垃圾收集器与内存分配策略
- Java(六) JVM内存分配策略和GC
- JVM的GC中对象的age以及JVM内存的分配策略
- GC发生时内存分配和回收策略
- JVM学习系列(三)——垃圾收集器与内存分配策略
- 深入理解JVM虚拟机学习笔记(三)内存分配和回收策略
- JVM学习笔记-内存分配与回收策略
- jvm学习笔记二(java内存分配策略和回收策略)
- JVM 学习笔记(三) 垃圾收集器与内存分配策略
- JVM(4)--java堆和栈、内存分配策略
- JVM系列二:GC策略&内存申请、对象衰老
- JVM对象引用与内存分配策略
- JVM笔记2_垃圾收集器与内存分配策略
- JVM学习-----java7与Java8新生代GC发生了什么