JVM的GC日志的主要参数包括如下几个:
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-XX:+PrintGCApplicationStoppedTime // 输出GC造成应用暂停的时间
-Xloggc:../logs/gc.log 日志文件的输出路径
GC日志
每一种收集器的日志格式都可以不同,但基本上都维持了一定的共性,以下两段GC日志为例:
33.125:[GC[DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680 secs] 100.667:[FullGC[Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K(21248K)],0.0150007 secs][Times:user=0.01 sys=0.00,real=0.02 secs]
最前面的数字“33.125:”和“100.667:”代表了GC发生的时间,这个数字的含义是从Java虚拟机启动以来经过的秒数。
开头的“[GC”和“[Full GC”说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的。如果有“Full”,说明这次GC是发生了Stop-The-World的,例如下面这段新生代收集器ParNew的日志也会出现“[Full GC”(这一般是因为出现了分配担保失败之类的问题,所以才导致STW)。如果是调用System.gc()方法所触发的收集,那么在这里将显示“[Full GC(System)”。
[Full GC 283.736:[ParNew:261599K->261599K(261952K),0.0000288 secs]
接下来的“[DefNew”、“[Tenured”、“[Perm”表示GC发生的区域,这里显示的区域名称与使用的GC收集是密切相关的。
Serial收集器中的新生代名为“Default New Generation”,所以显示的是“[DefNew”。
ParNew收集器,新生代名称就会变为“[ParNew”,意为“Parallel New Generation”。
Parallel Scavenge收集器,新生代称为“PSYoungGen”,老年代和永久代同理,名称也是由收集器决定的。
可参考:http://www.cnblogs.com/mikevictor07/p/5024645.html?utm_source=tuicool&utm_medium=referral
后面方括号内部的“3324K->152K(3712K)”含义是“GC前该内存区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)”。 而在方括号之外的“3324K->152K(11904K)”表示“GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)”。
再往后,“0.0025925 secs”表示该内存区域GC所占用的时间,单位是秒。
内存各区域分配日志
Heap def new generation total 9216K, used 4326K //年轻代 eden space 8192K, 51% used from space 1024K, 14% used to space 1024K, 0% used tenured generation total 10240K, used 6144K //老年代 the space 10240K, 60% used compacting perm gen total 12288K, used 2114K //永久代(方法区) the space 12288K, 17% used
垃圾收集器参数总结
参考链接:
https://blog.csdn.net/column/details/14851.html
https://blog.csdn.net/baidu_33116785/article/details/53258822
原文地址:https://www.cnblogs.com/zjxiang/p/9218211.html