JVM内存划分
YoungGC日志说明
FGC日志说明
-
user代表用户态回收耗时
-
sys内核态回收耗时
-
real实际耗时,由于多核的原因,时间总和可能会超过real时间
参数解析:
- GC和Full GC说明了这次垃圾收集的停顿类型,如果有"Full"则说明GC发生了"stop The World"
- 使用Serial收集器在新生代的名字是Default New Generation,因此显示的是"DefNew"
- 使用ParNew收集器在新生代的名字会变成"ParNew",意思是"Parallel New Generation"
- 使用Parallel scavenge收集器在新生代的名字是”PSYoungGen"
- 使用G1收集器的话,会显示为"garbage-first heap"
Allocation Failure表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据
通过程序说明gc过程
观察对象分布结构
首先我们会将3个2M的数组存放到Eden区,然后后面4M的数组来了后,将无法存储,因为Eden区只剩下2M的剩余空间了,那么将会进行一次Young GC操作,将原来Eden区的内容,存放到Survivor区,但是Survivor区也存放不下,那么就会直接晋级存入Old 区,接着清空Eden区域,然后我们将4M对象存入到Eden区中,如下图: