七种垃圾收集器


具体每一种的详情见

以下是垃圾回收日志中的一块:

0.150: [GC (System.gc()) [PSYoungGen: 5161K->931K(74752K)] 5161K->939K(245760K), 0.0007762 secs] 

[Times: user=0.00 sys=0.00, real=0.00 secs]

0.151: [Full GC (System.gc()) [PSYoungGen: 931K->0K(74752K)] [ParOldGen: 8K->781K(171008K)] 939K->781K(245760K),

[Metaspace: 3445K->3445K(1056768K)], 0.0045476 secs] 

[Times: user=0.01 sys=0.00, real=0.01 secs] 

日志解读

  • 0.150---时间戳

  • GC日志开头的“[GC 和 [Full GC” 说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是年老代GC的。

  •  PSYoungGen, ParOldGen,PSPermGen表示GC发生的区域,这里显示的区域名称与使用的GC收集器密切相关,不同收集器对于不同区域所显示的名称可能不同。

  • PSYoungGen表示新生代的Parallel Scavenge垃圾收集器,ParOldGen表示老年代收集器为Parallel old

  • (5) 后面方括号内部的 “ 5161K->931K(74752K) ”含义是“GC前该内存区域(新生代)已使用容量 -> GC后该内存区域已使用容量(该内存区域总容量)”。方括号之外的 5161K->939K(245760K) 表示GC前java堆已使用容量 -> GC后java堆已使用容量(Java堆总容量)

  •  0.0007762 secs表示该内存区域GC所占用的时间,单位是秒。

  • [Times: user=0.00 sys=0.00, real=0.00 secs]这里面的user、sys、和real与Linux的time命令所输出的时间含义一致。分别代表用户消耗的CPU时间,内存态消耗的CPU时间,和操作从开始到结束所经过的墙钟时间。