细读JVM日志--01

七种垃圾收集器
具体每一种的详情见
以下是垃圾回收日志中的一块:
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时间,和操作从开始到结束所经过的墙钟时间。
借用网上的两张图:
新生代
老年代
点个赞