【JVM】如何分析GC日志

环境:JDK1.8

Edit Configurations
在这里插入图片描述
配置VM参数

-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails

PrintGCDetails:打印GC详细日志
如下
在这里插入图片描述
编写代码
在这里插入图片描述
执行结果
在这里插入图片描述
首先分析第一行
[GC (Allocation Failure) [PSYoungGen: 5328K->488K(6144K)] 5328K->2907K(19968K), 0.0042497 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

[GC和[FullGC
GC和FullGC说明了这次垃圾收集的停顿类型,不是用来区分老年代和新生代的。如果有Full,说明这次GC出现了Stop-The-World(暂停用户线程)。

GC (Allocation Failure)
表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。
GC (System)
表明是调用System.gc()触发的手机

[PSYoungGen
[DefNew、[Tenured 、[Perm、[PSYoungGen 等都是表示GC发生的区域

区域名和使用的收集器紧密相关

收集器 区域 名称
serial 新生代 DefNew
ParNew 新生代 DefNew
Parallel Scavenge 新生代 PSYoungGen
serial 新生代 DefNew

在这里插入图片描述

5328K->488K(6144K)
5328K->488K(6144K)
5328K是指GC前该内存区域已使用容量
488K是指GC后该内存区域已使用容量
6144K该内存区域总容量

方括号外
在这里插入图片描述
5328K->2907K(19968K)
5328K是指GC前Java堆已使用容量
2907K是指GC后Java堆已使用容量
19968K Java堆总容量

在这里插入图片描述
该内存区域内存所占用的时间

在这里插入图片描述Times: user=0.00 sys=0.00, real=0.00 secs
user:用户线程占用的时间
sys:系统内核占用的时间
real:实际占用的时间,操作从开始到结束所经过的墙钟时间

猜你喜欢

转载自blog.csdn.net/yujing1314/article/details/106582454