您的位置:首页 > 编程语言 > Java开发

学习JAVA虚拟机工具

2015-11-19 00:00 405 查看
执行一段代码:

package com.icnws;

public class Test1 {
private static final int _1MB = 1024*1024;

public Test1() {
}
public static void main(String[] args)throws Throwable{
byte[] allocation1,allocation2,allocation3,allocation4;
allocation1 = new byte[2 * _1MB];
allocation2 = new byte[3 * _1MB];
allocation3 = new byte[3 * _1MB];
allocation4 = new byte[4 * _1MB];//加了断点
}
}

虚拟机参数: · -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 `

用虚拟机统计信息监视工具jstat查看Test1执行时内存状况

c:\Java\jdk1.7.0_67\bin>jstat -gcutil 4996
S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
0.00  13.64  89.58  58.25  99.91     33    0.667    17    3.538    4.205

新生代Eden(E)区:使用了89.58%的空间 幸存区(S0,S1):使用了13.64%的空间 老年代(O——old)和永久代(P——permanent)分别使用了58.25%和99.91%的空间 程序运行以来总共 发生Minor GC(YGC) 33次,耗时0.667秒 发生Full GC(FGC) 17次,耗时3.538秒 所有GC总耗时(GCT)为4.205秒

再次执行Test1并查看内存状况

c:\Java\jdk1.7.0_67\bin>jstat -gcutil 4996
S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
39.86   0.00  20.90  45.55  99.86     40    0.808    18    3.872    4.679

发现Survivor0区使用了,Survivor1区没有使用,伊甸园区也减少的使用比例,但是老年代和永久代都使用比例较高 同样也发生了多次新生代垃圾回收和老年代的垃圾回收 我们再执行一次Test1来看看:

c:\Java\jdk1.7.0_67\bin>jstat -gcutil 4996
S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
42.34   0.00  29.58  45.55  99.88     44    0.900    18    3.872    4.771

这次执行总体来说和上次基本一样,只是Survivor0区有所增加,原因是一些伊甸园区的对象进入了Survivor0区,但是对于老年代和永久代来说,新生成的对象和被逐出的对象大小基本一样,所以变化很少。

多次执行Test1的代码也发现新生代垃圾回收和老年代垃圾回收的次数基本上是相同的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdk jstat jvm JVM学习