5 垃圾收集器G1&ZGC

1 G1

        -XX:+UseG1GC

1.1 概念

        G1将Java堆划分为多个大小相等的独立区域(Region),JVM最多可以有2048个Region(大小为堆大小除以2048)

        年轻代中的Eden和Survivor对应的region也跟之前一样,默认8:1:1,假设年轻代现在有1000个region,eden区对应800个,s0对应100个,s1对应100个

        大对象的处理,Humongous区

1.2 步骤

        初始标记STW:暂停所有的其他线程,并记录下gc roots直接能引用的对象,速度很快

        并发标记:同CMS的并发标记

        最终标记STW:同CMS的重新标记

        筛选回收:回收价值和成本进行排序,根据用户所期望的GC停顿时间(可以用JVM参数 -XX:MaxGCPauseMillis指定)来制定回收计划

1.3 总结

什么场景适合使用G1
        1  50%以上的堆被存活对象占用
        2 对象分配和晋升的速度变化非常大
        3 垃圾回收时间特别长,超过1秒
        4 8GB以上的堆内存(建议值)
        5 停顿时间是500ms以内 

2 ZGC

2.1 概念

        ZGC收集器是一款基于Region内存布局的, 暂时不设分代的, 使用了读屏障、 颜色指针等技术来实现可并发的标记-整理算法的, 以低延迟为首要目标的一款垃圾收集器
        ZGC的Region可以具有如图3-19所示的大、 中、 小三类容量:
                小型Region(Small Region) : 容量固定为2MB, 用于放置小于256KB的小对象
                中型Region(Medium Region) : 容量固定为32MB, 用于放置大于等于256KB但小于4MB的对象
                大型Region(Large Region) : 容量不固定, 可以动态变化, 但必须为2MB的整数倍, 用于放置4MB或
                以上的大对象。 每个大型Region中只会存放一个大对象, 这也预示着虽然名字叫作“大型Region”, 但它的实际容量完全有可能小于中型
Region, 最小容量可低至4MB。 大型Region在ZGC的实现中是不会被重分配(重分配是ZGC的一种处理动作,用于复制对象的收集器阶段, 稍后会介绍到)的, 因为复制一个大对象的代价非常高昂

2.2 运行过程

3 总结

如何选择垃圾收集器
        1 优先调整堆的大小让服务器自己来选择
        2 如果内存小于100M,使用串行收集器
        3 如果是单核,并且没有停顿时间的要求,串行或JVM自己选择
        4 如果允许停顿时间超过1秒,选择并行或者JVM自己选
        5 如果响应时间最重要,并且不能超过1秒,使用并发收集器
        6 4G以下可以用parallel,4-8G可以用ParNew+CMS,8G以上可以用G1,几百G以上用ZGC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值