开启GC日志
- -XX:+PrintGCDetails参数则可以打印详细GC信息至控制台
- -XX:+PrintGCDateStamps则可以记录GC发生的详细时间
- -Xloggc:gc.log可以把GC输出至文件
日志格式
- -XX:+PrintGCDetails日志格式: [GC [PSYoungGen: 142826K->10751K(274944K)] 162800K->54759K(450048K), 0.0609952 secs] [Times: user=0.13 sys=0.02, real=0.06 secs]
- 加上-XX:+PrintGCDateStamps的日志格式: 2017-02-20T11:46:11.855+0800: 0.723: [Full GC (Metadata GC Threshold) [PSYoungGen: 16166K->0K(153088K)] [ParOldGen: 88K->15398K(349696K)] 16254K->15398K(502784K), [Metaspace: 20906K->20906K(1069056K)], 0.0196853 secs] [Times: user=0.06 sys=0.02, real=0.02 secs]
日志含义
` 2017-02-20T11:46:11.855+0800: 0.723: [Full GC (Metadata GC Threshold) [PSYoungGen: 16166K->0K(153088K)] [ParOldGen: 88K->15398K(349696K)] 16254K->15398K(502784K), [Metaspace: 20906K->20906K(1069056K)], 0.0196853 secs] [Times: user=0.06 sys=0.02, real=0.02 secs] `
- 2017-02-20T11:46:11.855+0800
    - 2017-02-20T11:46:11.855+0800 GC事件(GC event)开始的时间点.
 
- 0.723
    - 0.723 – GC时间的开始时间,相对于JVM的启动时间,单位是秒(Measured in seconds).
 
- Full GC
    - 用来区分是 Minor GC 还是 Full GC 的标志(Flag)
 
- Metadata GC Threshold
    - 引起垃圾回收的原因,GC是Metaspace分配失败造成的.Java 8 Metaspaces取代PermGen
 
- PSYoungGen
    - 使用的垃圾收集器的名字
 
- 16166K->0K
    - 在本次垃圾收集之前和之后整个堆内存的使用情况
 
- (153088K)
    - 年轻代的总的大小
 
- ParOldGen
    - 使用的垃圾收集器的名字
 
- 88K->15398K
    - 在本次垃圾收集之前和之后整个堆内存的使用情况
 
- (349696K)
    - 老年代的总的大小
 
- 16254K->15398K
    - 在本次垃圾收集之前和之后整个堆内存的使用情况
 
- (502784K)
    - 总的可用的堆内存
 
- Metaspace: 20906K->20906K(1069056K)]
    - Metaspace内存的信息,同上
 
- 0.0196853 secs
- GC事件的持续时间(Duration),单位是秒
- Times: user=0.46 sys=0.05, real=0.07 secs
    - user 此次垃圾回收, 垃圾收集线程消耗的所有CPU时间
- sys操作系统调用(OS call) 以及等待系统事件的时间(waiting for system event)
- real则代表应用程序暂停的时间(在多核CPU中并行回收,它通常小于user)
 
