Java GC 日志格式理解小结
下面以一个典型的GC日志做分析:
33.125: [GC[DefNew:3324K->152K(3712K), 0.0025925 secs]3324K->152K( 11904K), 0.0031680 secs]
100.667: [FullGC[Tenured: 0 K->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 和 [FullGC : 说明了此次垃圾回收停顿类型。如果有“Full”,说明了本次GC发生了Stop-The-World(STW)。
- 如果是调用了System.gc()方法触发的收集,这里将显示”[FullGC(System)”
- [DefNew 、[Tenured、[Perm:表示GC发送的区域,与使用GC收集器密切相关
- 使用的Serial收集器中的新生代名为“Default New Generation”所以显示的是“[DefNew”
- 使用的ParNew收集器中的新生代名为“Parallel New Generation”所以显示的是“[ParNew”
- 使用的Parallel Scavenge收集器中的新生代名为“Parallel Scavenge Young Generation”所以显示的是“[PSYoungGen”
- 老年代Tenured和永久代Perm同理,具体名称依旧由使用的收集器决定
- [..3324K->152K(3712K)…]:格式含义是“GC前该内存区域已使用的容量->GC后该内存区域已使用容量(该内存区域总容量)”
- […]3324K->152K( 11904K)…:格式含义是“GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)”
- 0.0031680 secs:表示该内存区域GC所占用的时间,单位秒。
- 有的收集器还会给出更具体的时间 “[Times: user=0.01 sys=0.00, real=0.02 secs]”
- 分别代表:用户态消耗的CPU时间、内核态消耗的CPU时间和操作从开始到结束所经过的墙钟时间(Wall Clock Time)。
- TIP:墙钟时间(Wall Clock Time)包括了各种非运算的等待耗时,如磁盘IO。而CPU时间不包括这些耗时
- 有的收集器还会给出更具体的时间 “[Times: user=0.01 sys=0.00, real=0.02 secs]”