环境:JDK1.8
Edit Configurations
配置VM参数
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails
PrintGCDetails:打印GC详细日志
如下
编写代码
执行结果
首先分析第一行
[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:实际占用的时间,操作从开始到结束所经过的墙钟时间