为了了解垃圾回收日志的内容,分析从众够得到哪些有用的信息。我们需要添加如下启动参数:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
输出的日志结果如下:
第一行:
2015-05-26T14:45:37.987-0200: 151.126:
[GC (Allocation Failure) 151.126:
[DefNew: 629119K->69888K(629120K), 0.0584157 secs]
1619346K->1273247K(2027264K), 0.0585007 secs]
[Times: user=0.06 sys=0.00, real=0.06 secs]
2015-05-26T14:45:59.690-0200: 172.829:
第二行:
[GC (Allocation Failure) 172.829:
[DefNew: 629120K->629120K(629120K), 0.0000372 secs]
172.829: [Tenured: 1203359K->755802K(1398144K), 0.1855567 secs]
1832479K->755802K(2027264K),
[Metaspace: 6741K->6741K(1056768K)], 0.1856954 secs]
[Times: user=0.18 sys=0.00, real=0.18 secs]
从上面的GC日志片段我们可以了解JVM的信息。
从上面的GC日志可以看出,JVM发生了两次GC事件,第一次是回收新生代,第二次是回收整个堆。
我们来分析minor GC的日志:
通过上面垃圾回收日志片段的介绍,我们了解了GC事件中内存的变化。
垃圾回收前堆的总使用量为1,619,346K。其中新生代使用量为629,119K。通过这些信息我们可以计算出老年代的使用量990,227k。
垃圾回收后新生代减少了 559,231K(629119K-69888K),堆的总使用量减少了346,099K( 1619346K-1273247K),可以计算出有 213,132K(559,231K-346,099K)的对象从新生代移动到了老年代。
更多详细内容参见:https://plumbr.io/java-garbage-collection-handbook
原文地址:https://plumbr.io/blog/garbage-collection/understanding-garbage-collection-logs