概述
每一种收集器的日志形式都是由它们自身的实现所决定的,格式不一致。
示例
1 | 33.125:[GC[DefNew:3324K->152K(3712K),0.0025925secs]3324K->152K(11904K),0.0031680 secs] |
GC发生的时间(虚拟机启动以来经过的秒数):[
停顿类型[
发生区域:
GC前该内存区域已使用容量->
GC后该内存区域已使用容量(内存区域总容量),该区域GC所占用的时间(秒)
]
GC前Java堆已使用容量->
GC后Java堆已使用容量(Java堆总容量)
1 | 100.667:FullGC[Tenured:0K->210K(10240K),0.0149142secs]4603K->210K(19456K),[Perm:2999K->2999K(21248K)],0.0150007 secs |
- 类型:
- FullGC:Stop-The-World
- FullGC(System):调用
System.gc()
- GC发生的区域(收集器决定名字)
- DefNew
- Serial中新生代名为”Default New Generation”
- ParNew中则为”ParNew”,意为”Parallel New Generation”
- Parallel Scavenge中则为“PSYoungGen”
- Tenured
- Perm
- DefNew
1 | [Full GC 283.736:[ParNew:261599K->261599K(261952K),0.0000288 secs] |
ParNew出现Full GC:一般是因为出现了分配担保失败之类的问题,所以才导致STW。
其它
有的收集器会给出更具体的时间数据
1 | [Times : user=0.01 sys=0.00, real=0.02 secs] |
user
:用户态消耗的CPU时间
sys
:内核态消耗的CPU时间
real
:操作从开始到结束所经过的墙钟时间(Wall Clock Time)
CPU时间与墙钟时间的区别:
- CPU时间不包括耗时
- 系统有多CPU或多核时,多线程操作会叠加这些CPU时间
- 墙钟时间包括各种非运算的等待耗时
- 等待磁盘I/O
- 等待线程阻塞