024、JVM实战总结:动手实验:线上部署系统时,如何设置垃圾回收相关参数?

 

1、前文回顾

        CMS采用了4个阶段来垃圾回收:初始标记(STW)、并发标记、重新标记(STW)、并发清理

    2、并发回收垃圾导致CPU资源紧张

        并发标记和并发清理两个最耗时的阶段垃圾回收线程和系统工作线程同时工作会导致有限的CPU资源被垃圾回收线程占用了一部分。

        并发标记:对GC Roots进行深度追踪,但老年代的存活对象比较多,导致会追踪大量对象,耗时较高

        并发清理:垃圾对象从各种随机的内存位置清理掉,也是比较耗时的

        CMS默认启动的垃圾回收线程的数量是(CPU核数 + 3)/ 4

    3、Concurrent Mode Failure问题

        CMS只不过是回收之前标记好的垃圾对象,但在清理的过程中存在新加入老年代的垃圾对象(大对象或晋升过来的对象),这种垃圾对象是‘浮动垃圾’,需要下次FullGC来清理。

         -XX:CMSInitiatingOccupancyFaction 参数可以用来设置老年代占用多少比例的时候触发CMS垃圾回收

         CMS垃圾回收期间,系统程序要放入老年代的对象大于了可用内存空间,此时会如何?会发生Concurrent Mode Failure,此时就会自动用Serial Old垃圾回收器替代CMS,强行把系统程序STW重新进行长时间的GC Roots追踪,然后一次性把垃圾对象都回收掉,完事儿了再恢复系统线程

    4、内存碎片问题

        CMS采用标记-清理算法,会产生内存碎片问题。内存碎片会导致更加频繁的FullGC,CMS垃圾收集器 -XX:+UseCMSCompactAtFullCollection 参数默认是打开的,意思是:FullGC后,STW 然后进行碎片整理。

        -XX:CMSFullGCsBeforeCompaction意思是执行多少次Full GC之后再执行一次内存碎片整理的工作。默认值是0 (每次FullGC都进行内存整理)

 

本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明,更详细内容:

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java硕哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值