生产协查问题必备技能-GC日志分析

107 阅读1分钟

JVM内存划分

image.png

YoungGC日志说明

image.png

FGC日志说明

  • user代表用户态回收耗时

  • sys内核态回收耗时

  • real实际耗时,由于多核的原因,时间总和可能会超过real时间

    image.png

    参数解析:

    image.png

  • 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过程

image.png

观察对象分布结构

image.png

首先我们会将3个2M的数组存放到Eden区,然后后面4M的数组来了后,将无法存储,因为Eden区只剩下2M的剩余空间了,那么将会进行一次Young GC操作,将原来Eden区的内容,存放到Survivor区,但是Survivor区也存放不下,那么就会直接晋级存入Old 区,接着清空Eden区域,然后我们将4M对象存入到Eden区中,如下图:

image.png