深入JVM之G1收集器

时间:2023-01-02 16:37:14

深入JVM之G1收集器

一、G1收集器简介

  1. G1收集器(JDK1.7u4正式出现)
    深入JVM之G1收集器

普遍存在:全内存扫描问题。
传统的收集器不能满足高内存高cpu的要求,这才是G1产生的原因。

2.G1区域划分
深入JVM之G1收集器

在G1之中不再区分所谓的年轻代、老年代内存空间,所有的内存空间就是一块。但是要划分出不同的子区域。

二、G1收集策略

虽然在G1收集器里面将整个内存区域都混合在了一起,但是其本身依然也是在小范围内要进行年轻代与老年代的区分,也就是说依然会采用不同的GC方式来处理不同的区域。

G1——年轻代有对象
深入JVM之G1收集器

G1——年轻代对象被回收
深入JVM之G1收集器

所有的垃圾内存的保存区域有可能会被清空后重新分配。

但是老年代的处理流程不一样了,因为任何时候如果要想标注老年代的不用内存空间,都需要进行一些暂停,而G1之中的最大好处它不用进行全内存扫描,只需要按照区域来进行扫描即可。

G1老年代回收
深入JVM之G1收集器

G1——老年代,标记阶段
深入JVM之G1收集器

G1——老年代,根区域扫描
深入JVM之G1收集器

G1——老年代,重新标记阶段
深入JVM之G1收集器

G1——老年代,清理、拷贝阶段
深入JVM之G1收集器

G1——清理完毕
深入JVM之G1收集器

三、G1相关处理参数

清楚了G1的基本运行原理之后,那么下面就需要进行一些G1的配置。(需慎重使用,可能会有一些问题出现)

G1收集器参数
深入JVM之G1收集器

范例:使用G1回收器

java -Xmx10m -Xms10m -XX:+UseG1GC -XX:+PrintGCDetails TestDemo

G1处理和传统的垃圾收集策略是不同的,关键的因素是它将所有的内存进行了子区域的划分。