CMS是一个很好的并发垃圾收集器,但是使用过程中会产生两个重要的问题。

  • promotion failed 晋升失败
  • concurrent mode failure 收集器无法处理浮动垃圾

promotion failed 晋升失败原因

该问题发生在Minor GC过程中,Survivor Space放不下转移的对象,老年代也放不下(promotion failed发生的时候老年代CMS还没有机会进行回收,又放不下转移到老年代的对象,下一步就会产生concurrent mode fialure,发生STW降级为Serial Old)

下面是一条promotion failed失败的日志

106.641: [GC 106.641: [ParNew (promotion failed): 14784K->14784K(14784K), 0.0370328 secs]106.678: [CMS106.715: [CMS-concurrent-mark: 0.065/0.103 secs] [Times: user=0.17 sys=0.00, real=0.11 secs]
(concurrent mode failure): 41568K->27787K(49152K), 0.2128504 secs] 52402K->27787K(63936K), [CMS Perm : 2086K->2086K(12288K)], 0.2499776 secs] [Times: user=0.28 sys=0.00, real=0.25 secs]

concurrent mode failure产生的原因

concurrent mode failureCMS特有的错误,CMS的垃圾清理线程和用户线程是并行进行的. 老年代正在清理,从年轻代晋升了新对象,或者分配的大对象在新生代放不下,直接在老年代分配内存,这时老年代也放不下,则会抛出concurrent mode failure

concurrent mode failure的影响

老年代的垃圾收集器从CMS退化成Serial Old,所有用户线程被暂停,停顿时间变长。

解决方案

CMS触发太晚

-XX:CMSInitiatingOccupancyFraction=N 是指设定CMS在对内存占用率达到N%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);

  • 将:-XX:CMSInitiatingOccupancyFraction=N调小

空间碎片太多

开启空间碎片整理,并将空间碎片整理周期设置在合理范围,-XX:CMSFullGCsBeforeCompaction作用:设置在执行多少次Full GC后对内存空间进行压缩整理。

  • -XX:+UseCMSCompactAtFullCollection (空间碎片整理)
  • -XX:CMSFullGCsBeforeCompaction=n

垃圾产生太快

  • 晋升阈值太小
  • Survivor空间过小
  • Eden区过小,导致晋升速率过快
  • 存在大对象

CMS收集器中两个致命的问题相关推荐

  1. (七)JVM成神路之GC分代篇:分代GC器、CMS收集器及YoungGC、FullGC日志剖析

    引言 在<GC基础篇>中曾谈到过分代以及分区回收的概念,但基础篇更多的是建立在GC的一些算法理论上进行高谈阔论,而本篇则重点会对于分代收集器的实现进行全面详解,其中会涵盖串行收集器.并行收 ...

  2. 27.垃圾收集器(Serial收集器、ParNew收集器、Parallel收集器、Parallel Old 收集器、CMS收集器、G1收集器、常用的收集器组合)

    27.垃圾收集器 27.1.Serial收集器 27.2.ParNew收集器 27.3.Parallel收集器 27.4.Parallel Old 收集器 27.5.CMS收集器 27.6.G1收集器 ...

  3. JVM实用参数(七)CMS收集器

    原文连接 本文连接  译者: iDestiny  校对:梁海舰 HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间.该目标对于大多数交互式应用很重要,比如web应 ...

  4. 垃圾收集器(CMS收集器 , G1收集器…)

    Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,以下讲 ...

  5. 一网打尽!CMS收集器和G1收集器的区别

    CMS 收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器.它非常符合在注重用户体验的应用上使用. CMS(Concurrent Mark S ...

  6. java io null异常,java.io.IOException:所有收集器的初始化失败。最后一个收集器中的错误是:null...

    我是MapReduce的新手,我试图找到问题的解决方案.我试图链接两个地图reduce作业.第一份工作正在执行,但在第二份工作上我是得到一个错误如下java.io.IOException:所有收集器的 ...

  7. CMS收集器与G1收集器

    说明:本文摘自<深入理解Java虚拟机>,是自己看书总结文章.以下正文开始 收集器中的***并行(Parallel)***语义:指多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态 收 ...

  8. CMS收集器和G1收集器,优缺点对比

    点击上方关注"Java后端技术栈" 很多面试题都会涉及CMS收集器和G1收集器,这里面有一个非常重要的知识点:G1只有并发标记才不会stop-the-world,其他都会停下来. ...

  9. CMS收集器几个参数详解 -XX:CMSInitiatingOccupancyFraction, CMSFullGCsBeforeCompaction

    CMSInitiatingOccupancyFraction -XX:CMSInitiatingOccupancyFraction这个参数是指在使用CMS收集器的情况下,老年代使用了指定阈值的内存时, ...

最新文章

  1. 腾讯面试官问我Java中boolean类型占用多少个字节?我说一个,面试官让我回家等通知...
  2. 肠·道 | 朱元方:产检消毒恐误伤菌脉,6大举措则促菌脉相承
  3. 2011年度最佳10款免费的 WordPress 主题
  4. 绿网天下:上云解决系统安全和安全合规
  5. 为什么你写的拦截器中不能注入Java bean?
  6. Mybatis框架 导入/导出功能的实现
  7. 16种oracle查询日期语句
  8. 蓝桥杯2020年第十一届C/C++国赛B组第二题-扩散
  9. DBLE分库分表示例
  10. vue swiper click失效
  11. IDEA如何在包下面继续建包
  12. to be solved
  13. duang!各位期待的傻猴更新稳定版来了~
  14. wordpress搜索引擎蜘蛛统计插件SEO
  15. BJTUOJ 1853 gangpener买零食(水~)
  16. iOS字体 动态下载系统提供的多种中文字体
  17. 【Codeforces】964B Messages【乱搞】
  18. Windows CE.net的智能…
  19. 官方认定!IT程序员正式成为“新生代农民工”-道合顺大数据
  20. 计算机控制系统的五种类型,计算机控制系统习题(1-5章

热门文章

  1. 一句代码实现gzip压缩解压缩
  2. C中的预编译宏定义-转
  3. java servlet 学习_java学习之web基础(1):Servlet
  4. [Java] 蓝桥杯ADV-214 算法提高 3-3求圆面积表面积体积
  5. 蓝桥杯 ADV-70 算法提高 冒泡法排序
  6. 【Spring】Spring的AOP术语解释
  7. docker与虚拟机性能比较
  8. ionic4请求skynet服务器的资源跨域问题
  9. Exchange Server 2013 OWA IIS重定向
  10. IIS7增加mine类型,以便可以访问apk