JVM-05 G1和ZGC垃圾回收器

  • G1

1)面向服务器

2)主要针对配备多颗处理器及大容量内存的机器

3)以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征

4)堆划分为多个大小相等的独立区域(Region),不超过2048个Region(JVM源码里TARGET_REGION_NUMBER 定义),实际可以超过该值,但是不推荐。

5)Region大小等于堆大小除以2048,比如堆大小为4096M,则Region大小为2M,可以用参数"-XX:G1HeapRegionSize"手动指定Region大小,但是推荐默认的计算方式。

6)G1保留了年轻代和老年代的概念,但不再是物理隔阂了,它们都是可以不连续Region的集合。

7)默认年轻代对堆内存的占比是5%,如果堆大小为4096M,那么年轻代占据200MB左右的内存,对应大概是100个Region,可以通过“-XX:G1NewSizePercent”设置新生代初始占比,在系统运行中,JVM会不停的给年轻代增加更多的Region,但是最多新生代的占比不会超过60%,可以通过“-XX:G1MaxNewSizePercent”调整。年轻代中的Eden和Survivor对应的region也跟之前一样,默认8:1:1,假设年轻代现在有1000个region,eden区对应800个,s0对应100个,s1对应100个。

8)一个Region可能之前是年轻代,如果Region进行了垃圾回收,之后可能又会变成老年代,Region的区域功能可能会动态变化。

9)G1垃圾收集器对于对象什么时候会转移到老年代跟之前的原则一样

10)对大对象的处理,G1有专门分配大对象的Humongous Region,而不是让大对象直接进入老年代的Region中。在G1中,大对象的判定规则就是一个大对象超过了一个Region大小的50%,比如每个Region是2M,只要一个大对象超过了1M,就会被放入Humongous中,而且一个大对象如果太大,可能会横跨多个Region来存放。

11)Humongous区专门存放短期巨型对象,不用直接进老年代,可以节约老年代的空间,避免因为老年代空间不够的GC开销。

12)Full GC的时候除了收集年轻代和老年代之外,也会将Humongous区一并回收。

  • G1收集器GC过程(主要指Mixed GC):

1):初始标记标记出GCRoot直接引⽤的对象。STW
2):标记Region,通过RSet标记出上⼀个阶段标记的Region引⽤到的Old区Region。
3):并发标记阶段:跟CMS的步骤是差不多的。只是遍历的范围不再是整个Old区,⽽只需要遍
历第⼆步标记出来的Region。
4):重新标记:跟CMS中的重新标记过程是差不多的。
5):垃圾清理:与CMS不同的是,G1可以采⽤拷⻉算法,直接将整个Region中的对象拷⻉到另
⼀个Region。⽽这个阶段,G1只选择垃圾较多的Region来清理,并不是完全清理。

  • G1垃圾收集分类

1)YoungGC

YoungGC并不是现有的Eden区放满了就会马上触发,G1会计算下现在Eden区回收大概要多久时间,如果回收时间远远小于参数 -XX:MaxGCPauseMills 设定的值,那么增加年轻代的region,继续给新对象存放,不会马上做Young GC,直到下一次Eden区放满,G1计算回收时间接近参数 -XX:MaxGCPauseMills 设定的值,那么就会触发Young GC

2)MixedGC

不是FullGC,老年代的堆占有率达到参数(-XX:InitiatingHeapOccupancyPercent)设定的值则触发,回收所有的Young和部分Old(根据期望的GC停顿时间确定old区垃圾收集的优先顺序)以及大对象区,正常情况G1的垃圾收集是先做MixedGC,主要使用复制算法,需要把各个region中存活的对象拷贝到别的region里去,拷贝过程中如果发现没有足够的空region能够承载拷贝对象就会触发一次Full GC

3)Full GC

停止系统程序,采用单线程进行标记、清理和压缩整理,空闲出来一批Region来供下一次MixedGC使用,这个过程是非常耗时的。(Shenandoah优化成多线程收集了)

  • ZGC​​​​​​​

待补充...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值