代码如下:
public static void main(String[] args) {
byte[] obj1 = new byte[1024 * 1024 * 10];
obj1 = null;
byte[] obj2 = new byte[1024 * 1024 * 10];
byte[] obj3 = new byte[1024 * 1024 * 20];
obj3 = null;
byte[] obj4 = new byte[1024 * 1024 * 20];
}
该代码的作用就是分别触发了一次Monior GC(也叫Young GC)和Full GC。然后用JVM参数:-XX:+PrintGCDetails打印出详细情况。
采用:
java -Xmx50m -Xms50m -Xmn15m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:PretenureSizeThreshold=20971520 mem.Main
和
java -Xmx50m -Xms50m -Xmn15m -XX:+PrintGCDetails -XX:+UseParNewGC -XX:PretenureSizeThreshold=20971520 mem.Main
这两组参数分别运行。其中,有-XX:+UseSerialGC的是Serial收集器;有-XX:+UseParNewGC的是ParNew收集器。-XX:PretenureSizeThreshold参数的意思是说凡是大于20971520B(20MB)的对象将不分配在年轻代而会直接进入老年代(注意该参数只对Serial和ParNew这两个收集器有效!)
运行完毕后的结果如下:
java -Xmx50m -Xms50m -Xmn15m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:PretenureSizeThreshold=20971520 mem.Main
Minor GC:
---------------------
[GC [DefNew: 11033K->467K(13824K), 0.0494602 secs] 11033K->467K(49664K), 0.0496940 secs] [Times: user=0.00 sys=0.00, real=0.05 secs]
Full GC:
---------------------
[GC [Tenured: 20480K->10707K(35840K), 0.0087202 secs] 31679K->10707K(49664K), [Perm : 2578K->2578K(21248K)], 0.0096461 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
java -Xmx50m -Xms50m -Xmn15m -XX:+PrintGCDetails -XX:+UseParNewGC -XX:PretenureSizeThreshold=20971520 mem.Main
Minor GC:
---------------------
[GC [ParNew: 11033K->489K(13824K), 0.0645998 secs] 11033K->489K(49664K), 0.0649839 secs] [Times: user=0.00 sys=0.00, real=0.07 secs]
Full GC:
---------------------
[GC [Tenured: 20480K->10707K(35840K), 0.0092875 secs] 31701K->10707K(49664K), [Perm : 2578K->2578K(21248K)], 0.0101704 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
从上面的日志比较可以看出,Minor GC的时候,Serial收集器输出了DefNew来表示新生代的收集情况;而ParNew输出了ParNew来表示新生代的收集情况。另外,当发生Full GC的时候两者则是完全一模一样的(具体的收集数据和耗费时间当然是不一样的)。这点可以用于以后的日志分析中。当然读者也可以自己试试例如Parallel Scavenge收集器的情况。
PS:要注意到收集器一般是组合式使用的。如下图(这个图片引用自周志明先生的《深入理解Java虚拟机:JVM高级特性与最佳实践》中3.4节,P55):
只有两个有连线的收集器才能放在一起使用。
而JVM参数中对于垃圾收集起的指定是一个参数可能同时指定了2个收集器的组合,例如(这个图片引用自周志明先生的《深入理解Java虚拟机:JVM高级特性与最佳实践》中表3-1,P65):
阅读(4831) | 评论(0) | 转发(0) |