理解GC日志

理解GC 日志

如何查看GC日志

设置参数 :
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log
/**
 * 
 * -verbose:[class|gc|jni] 在输出设备上显示虚拟机运行信息。
 * -verbose:class 显示有多少个类被加载
 * -verbose:gc 在虚拟机发生内存回收时在输出设备显示信息
 * -verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。
 * -verbose:gc 
 * -XX:+PrintGCDetails  打印日志详细信息
 * -XX:+PrintGCDateStamps 显示时间戳
 * -Xloggc:gc.log 输出到文件
 * 
 * @author Nicholas
 *
 */

public class ReferenceCountingGC {

	public Object instance = null;
	private static final int _1MB = 1024 * 1024;

	// 这个属性的作用就是占点内存,以便在GC 日志中查看内存是否被回收
	private byte[] bigSize = new byte[2 * _1MB];

	public void testGC() {
		ReferenceCountingGC referenceCountingGC1 = new ReferenceCountingGC();
		ReferenceCountingGC referenceCountingGC2 = new ReferenceCountingGC();

		// 循环引用
		referenceCountingGC1.instance = referenceCountingGC2;
		referenceCountingGC2.instance = referenceCountingGC1;

		referenceCountingGC1 = null;
		referenceCountingGC2 = null;

		System.gc();
	}

	public static void main(String[] args) {
		new ReferenceCountingGC().testGC();
	}
}

具体的日志信息如下
Java HotSpot(TM) 64-Bit Server VM (25.45-b02) for windows-amd64 JRE (1.8.0_45-b15), built on Apr 30 2015 12:40:44 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 8288616k(4376860k free), swap 9533800k(3998704k free)
CommandLine flags: -XX:InitialHeapSize=132617856 -XX:MaxHeapSize=2121885696 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
2015-06-29T18:22:09.690+0800: 0.126: [GC (System.gc()) [PSYoungGen: 8806K->2696K(38400K)] 8806K->2704K(125952K), 0.0019668 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2015-06-29T18:22:09.694+0800: 0.128: [Full GC (System.gc()) [PSYoungGen: 2696K->0K(38400K)] [ParOldGen: 8K->2557K(87552K)] 2704K->2557K(125952K), [Metaspace: 2473K->2473K(1056768K)], 0.0070960 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
Heap
PSYoungGen total 38400K, used 333K [0x00000000d5d80000, 0x00000000d8800000, 0x0000000100000000)
eden space 33280K, 1% used [0x00000000d5d80000,0x00000000d5dd34a8,0x00000000d7e00000)
from space 5120K, 0% used [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000)
to space 5120K, 0% used [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000)
ParOldGen total 87552K, used 2557K [0x0000000081800000, 0x0000000086d80000, 0x00000000d5d80000)
object space 87552K, 2% used [0x0000000081800000,0x0000000081a7f448,0x0000000086d80000)
Metaspace used 2479K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 274K, capacity 386K, committed 512K, reserved 1048576K


这是一段gc 日志信息

这里有更清晰的图片说明

2015-06-29T18:22:09.690+0800: 0.126: [GC (System.gc()) [PSYoungGen: 8806K->2696K(38400K)] 8806K->2704K(125952K), 0.0019668 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

  • 2015-06-29T18:22:09.690+0800: 当前时间戳
  • 0.126: : GC发生的时间,从java虚拟机启动以来经过的秒数
  • GC (System.gc()) : GC类型 Full gc 表明发生了stop-the-world
  • PSYoungGen: : GC发生的区域和采用的垃圾回收器
  • 8806K : GC前YoungGen代内存占用
  • 2696K : GC后YoungGen代内存占用
  • (38400K) : YoungGen区的总内存大小
  • 8806K : GC前JVM堆的总内存占用
  • 2704K : GC后JVM堆的总内存占用
  • (125952K) : JVM堆的总容量
  • 0.0019668 secs : YoungGen GC耗时
  • user=0.00 : 用户耗时
  • sys=0.00 : 系统耗时
  • real=0.00 secs : 实际耗时 (墙钟时间)操作从开始到结束的总耗时

如何理解GC的类型和区域

GC: 和Full GC:表明垃圾收集的停顿类型,有full表明发生了stop-the-world,如果调用了system.gc(),则类型是[Full GC(System)]

GC发生的区域和所使用的收集器密切相关

    • PSYoungGen: PS是Parallel Scavenge收集器的缩写,所以PSYoungGen可以理解为对新生代采用Parallel Scavenge收集器收集。
    • DefNew: Default New generation,使用serial收集器对新生代收集。
    • ParNew: Parallel New generation,使用ParNew收集器收集新生代。
老年代同理。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值