CMS收集器整理 @white

  • 基本说明:

    • 目标:获取最短回收停顿时间
    • 算法:标记-清除算法
    • 线程:并发
  • 步骤:
    • 初始标记:(会STP)

      • 标记 GC Roots 能直接关联到的对象,速度很快
    • 并发标记:(耗时最长,且可与用户线程一起工作)
      • 进行 GC Root Tracing 的过程
    • 重新标记:(会STP)
      • 修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。
      • 时间:比初始标记稍长,远比并发标记时间短。
    • 并发清除:(耗时最长,且可与用户线程一起工作)
    • 总体来说:可以看作,CMS的内存回收过程是与用户线程一起并发执行的。
  • 缺点:
    • 1、对CPU资源敏感

      • 问题:并发阶段虽然用户线程不停顿,但会占用CPU资源导致用户线程变慢,吞吐量降低。

        • 默认回收线程数:(CPU数量+3)/4。

          • 当CPU>4时,并发线程>25%的CPU资源。且随CPU数量增加而下降。
          • 当CPU<4时(假设为2),并发线程>50%的CPU资源,很影响用户体验。
      • 解决:
        • (不提倡使用)提供“增量式并发收集器”:并发标记和并发清除阶段让GC线程和用户线程交替运行,减少GC线程的独占资源时间。会增长GC时间,但降低用户影响。
    • 2、无法处理浮动垃圾:
      • 1、浮动垃圾:进行并发清除时用户线程运行产生的垃圾。只能在下一次GC时再清理。
      • 2、并发清理阶段用户线程运行需要预留空间,老年代没有填充满就会进行GC。
        • JDK1.5:该GC启动百分比阈值为68%
        • JDK1.6:该GC启动百分比阈值为92%
        • 可通过:-XX:CMSInitiatingOccupancyFraction配置(太高会引发大量问题3)。
      • 3、老年代GC如果预留空间不足,会出现“Concurrent Mode Failure”,此时虚拟机会启动后被预案,临时启用 Serial Old 收集器,会导致停顿时间变长。
    • 3、基于标记-清除算法:
      • 问题:会产生空间碎片。大对象分配会因无法找到连续内存空间而触发FGC
      • 解决:
        • +UseCMSCompactAtFullCollection参数:在CMS要进行FGC时开启内存碎片的合并整理过程。默认开启。

          • 引发问题:内存整理导致停顿时间变长
        • -XX:CMSFullGCsBeforeCompaction参数:设置N次不压缩的FGC后跟着来一次带压缩的FGC。默认为0,即每次FGC都进行碎片整理。
 
 
 
 
 

面试之一:CMS收集器整理的更多相关文章

  1. CMS 收集器整理

    基本说明: 目标:获取最短回收停顿时间 算法:标记-清除算法 线程:并发 步骤: 初始标记:(会STP) 标记一下 GC Roots 能直接关联到的对象,速度很快 并发标记:(耗时最长,且可与用户线程 ...

  2. CMS收集器和G1收集器优缺点

    首先要知道 Stop the world的含义(网易面试):不管选择哪种GC算法,stop-the-world都是不可避免的.Stop-the-world意味着从应用中停下来并进入到GC执行过程中去. ...

  3. CMS收集器和G1收集器 他们的优缺点对比 G1只有并发标记才不会stop-the-world 其他都会停下来(阿里多次问到)

    CMS收集算法 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 G1收集算法 参考:G1 垃圾收集器入门 首先要知道 Stop the world的含义(网易面试):不管选择哪种GC算法,stop ...

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

    HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间.该目标对于大多数交互式应用很重要,比如web应用.在我们看一下有关JVM的参数之前,让我们简要回顾CMS收集器 ...

  5. CMS收集器产生的问题和解决方案

    垃圾收集器长时间停顿,表现在 Web 页面上可能是页面响应码 500 之类的服务器错误问题,如果是个支付过程可能会导致支付失败,将造成公司的直接经济损失,程序员要尽量避免或者说减少此类情况发生. 提升 ...

  6. JVM-如何判断对象存活与否与CMS收集器和G1收集器的区别

    JVM如何判断对象存活? 1.计数器 2.可达性分析   (很多主流语言采用这种方法来判断对象是否存活) 计数器:每当有一个地方引用该对象时,计数器 +1:引用失效则 -1: 优点:实现简单,判定效率 ...

  7. 垃圾收集器之:CMS收集器

    HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间.该目标对于大多数交互式应用很重要,比如web应用.在我们看一下有关JVM的参数之前,让我们简要回顾CMS收集器 ...

  8. CMS收集器和G1收集器

    CMS收集器 CMS收集器是一种以获取最短回收停顿时间为目标的收集器.基于"标记-清除"算法实现,它的运作过程如下: 初始标记 并发标记 重新标记 并发清除 初始标记.从新标记这两 ...

  9. JVM垃圾回收之CMS收集器

    从前文JVM垃圾回收几种常见算法和常见收集器我们知道,CMS是老年代垃圾收集器.CMS 收集器主要关注系统停顿时间.CMS 是 Concurrent Mark Sweep 的缩写,意为并发标记清除,从 ...

随机推荐

  1. QT实现右键快捷菜单

    [转自]:http://blog.csdn.net/rolland1989/article/details/5754575 QWidget及其子类都可有右键菜单,因为QWidget有以下两个与右键菜单 ...

  2. Atitit.软件gui按钮and面板---os区-----linux windows搜索文件 文件夹

    Atitit.软件gui按钮and面板---os区-----搜索文件 1. Find 1 2. 寻找目录 1 3. 2. Locate// everything 1 4. 3. Whereis (wi ...

  3. 用EA生成实体层代码

    在个人版机房重构中.实体层的代码敲得有点儿烦了.不同的实体仅仅是命名不同.代码结构全然一样.遇到反复的事情,就该动动脑.想想办法了. 以下给大家介绍使用EA生成实体层的代码. 首先.建一个类,注意选择 ...

  4. shell脚本之函数的使用

    把代码封装成函数,相当于造了一个“轮子”,之后就直接重复使用即可. 函数的创建 shell中函数的创建有2种方式 1.使用function关键字 语法 function test { ... } 2. ...

  5. Nginx - rewrite 不区分大小写进行匹配

    Nginx - rewrite 不区分大小写进行匹配 分类: Nginx2014-05-28 19:25 1046人阅读 评论(0) 收藏 举报 Use (?i) to match case-inse ...

  6. [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统

    转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...

  7. 使用Navicat连接阿里云服务器上的MySQL数据库=======Linux 开放 /etc/hosts.allow

    使用Navicat连接阿里云服务器上的MySQL数据库   1.首先打开Navicat,文件>新建连接> 2,两张连接方法 1>常规中输入数据库的主机名,端口,用户名,密码 这种直接 ...

  8. pip和 easy_insall的区别

    作为Python爱好者,如果不知道easy_install或者pip中的任何一个的话,那么......   easy_insall的作用和perl中的cpan,ruby中的gem类似,都提供了在线一键 ...

  9. php juery ajax 传值

    <script src="__PUBLIC__/jquery-1.11.2.min.js" type="text/javascript"></ ...

  10. hdu 1233 还是畅通project

    本题链接:点击打开链接 本题大意: 有n个村庄,n*(n-1)/2条路,输入每条路所连接是哪两个村庄及长度,求使全部村庄均连通(并不是都两两连通) 所铺公路的最短路程. 解题思路: 使用并查集基础及K ...