CMS回收器

简介

1. HotSpot在JDK1.5时期推出的一款垃圾收集器(用于老年代);

2. 采用 标记-清除算法;

3. 无法与新生代收集器Parallel Scavenge配合工作(JDK1.4推出的),能配合使用的新生代收集器:ParNew 或 Serial;

4. G1收集器出现之前CMS的使用非常广泛(到现在还是有很多系统使用);

5.HotSpot虚拟机第一款真正意义上的并发收集器;

6. JDK9 开始若手动设置开启CMS收集器,用户会收到警告信息:提示CMS未来将会被抛弃;

7. JDK14:删除CMS垃圾回收器,此时若手动设置CMS(XX:+UseConcMarkSweepGC),JVM会给出一个warning,自动回退默认GC启动JVM;

原理

CMS整个过程分为四个阶段:初始标记、并发标记、重新标记、并发清除阶段;

1. 初始标记:会短暂的出现STW(Stop-the-World),标记出GC Roots 能直接关联的对象(比较小),速度非常快;

2.并发标记:从GC Roots 直接关联对象开始遍历整个对象图的过程,耗时比较长,但不需要停顿用户线程,可以与垃圾收集线程一起并发运行;

3. 重新标记:在并发标记阶段中,程序工作线程、垃圾收集线程同时或交叉运行,导致初始标记部分不准确(线程内容发送变动),重新标记阶段用于修正这些变化,也会发生STW且比初始标记时间长一点,但总体还是很快;

4. 并发清除:清除掉标记判断为死亡的对象,释放内存空间,采用标记-清除算法,不会移动内存空间,清除过程中可以和用户线程并发;

特点

并发收集、低延迟

1. 仅仅在初始标记、重新标记阶段会短暂STW而已;

2. 其他阶段基本都是并发执行

弊端

1. 产生内存碎片(标记-清除算法:没去整理清除完的内存空间,但能让用户线程持续运行,不停顿),在无法分配大对象的情况下会提前触发 Full GC;

2. 对CPU资源敏感 (并发阶段占用了一部分线程导致程序变慢,总吞吐量降低)

3. 无法处理浮动垃圾:在并发标记阶段,程序工作线程和垃圾收集线程同时/交叉运行,如果在标记阶段产生新的垃圾,CMS无法对其进行标记,导致这些新产生的垃圾没被及时回收,只能在下次GC时处理;

垃圾回收器(CMS)相关推荐

  1. 垃圾回收器——CMS与G1

    垃圾回收器--CMS与G1 查看JVM所有的参数及默认值 什么是垃圾回收,为什么要有垃圾回收 根可达中的根 安全点与安全区间 内存分代划分,为什么要有内存分代划分 jstat CMS垃圾回收器 CMS ...

  2. 面试官最常问的垃圾回收器CMS

    前言 随着互联网技术的发展,线上用户量的大量增加,性能问题变得尤为重要,我们可以通过增大JVM的各项内存来解决一部分问题,但是这样总是片面的 应该双管齐下,既要从硬件方面变得逐渐强大,底层软件方向也不 ...

  3. JVM垃圾回收器cms详解

    关于serial,parnew,parallel等回收器的介绍可以参考上一篇jvm垃圾回收算法以及垃圾回收器,如何选择_bjzw的博客-CSDN博客 下面具体介绍一下cms,jdk8之后就已经废弃了c ...

  4. 史上最经典垃圾回收器(CMS,G1)详解、适用场景及特点、使用命令

    文章目录 垃圾收集器介绍总结 各个垃圾收集器之间的关系 垃圾收集器使用命令及默认值 详解各个垃圾收集器 Serial ParNew Parallel Scavenge Serial Old Paral ...

  5. jvm性能调优 - 15JVM的老年代垃圾回收器CMS的缺点

    文章目录 Pre 并发回收垃圾导致CPU资源紧张 Concurrent Mode Failure问题 内存碎片问题 什么情况下触发老年代GC Pre 上篇文章用一步一图的方式给大家讲清楚了CMS垃圾回 ...

  6. jvm性能调优 - 14JVM的老年代垃圾回收器CMS原理

    文章目录 Pre CMS垃圾回收的基本原理 如果Stop the World然后垃圾回收会如何? CMS如何实现系统一边工作的同时进行垃圾回收? 初始标记 并发标记 重新标记 并发清理 对CMS的垃圾 ...

  7. 023、JVM实战总结:一步一图:那JVM老年代垃圾回收器CMS工作时,内部又干了些啥?

    1.前文回顾 对象都分配在新生代的Eden区,然后每次垃圾回收之后,存活对象都进入Survivor区,下一次垃圾回收后的存活对象都进入另外一个Survivor区. 2.CMS垃圾回收的基本原理 采用标 ...

  8. JVM垃圾回收器-CMS并发标记清除

    Java8的CMS垃圾回收器官方文档参考:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/cms.html#con ...

  9. Tenured 区并发垃圾回收器CMS实战

    当使用CMS收集器时,当开始进行收集时,old代的收集过程如下所示: 1.首先jvm根据-XX:CMSInitiatingOccupancyFraction,-XX:+UseCMSInitiating ...

最新文章

  1. 2分钟在线做出一张普氏分析图(Procrustes Analysis)
  2. devexpress chart 柱形图
  3. 如何评估AI在医学影像识别中的应用效果?
  4. MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)
  5. 股票投资--中线篇(转)
  6. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
  7. MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
  8. 对程序实施精准手术!阿里安全猎户座实验室首创“自动逆向机器人”
  9. 一日一技:ASP.NET Core 判断请求是否为Ajax请求
  10. Analysis of Cloud Computing Architectures阅读笔记--提出了Screen虚拟化方法
  11. php 错误500排错,如何排查Web服务器HTTP ERROR 500的错误?
  12. mysql 大表 驱动_MySql 小表驱动大表
  13. .net中的各种委托(Delegate、Action、Func)
  14. 如何在数字化领域脱颖而出?TOGAF®认证为你的职业成长赋能
  15. TI单芯片毫米波雷达代码走读(二十二)—— 距离维CA-CFAR检测与目标统计
  16. 实现wpf的doevents
  17. 2018杭州云栖大会免费送票啦!
  18. writeUP-[第五空间2019 决赛]PWN5(待进一步完善待研究内容)
  19. 地理坐标定位和计算距离
  20. 会议记录管理系统(6) - 查找会议记录模块设计

热门文章

  1. ppt 2010 动画窗格 组合元素 使用方法
  2. Python画三个简单图形
  3. 定时启动和关闭指定程序的方法
  4. java soap 操作和发送soap消息
  5. 华为AGC短信服务手把手使用指导
  6. HDFS改造方案一览
  7. Java I/O 相关面试题
  8. PHP资产管理系统源码可自由设计资产卡片,适用于IT办公行业固定资产管理
  9. 研究生退税的详细流程
  10. 美丽的家乡---盘锦