概述

每一种收集器的日志形式都是由它们自身的实现所决定的,格式不一致。

示例

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
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
    • 等待线程阻塞