CMS(Concurrent Mark Sweep)垃圾回收器的具体流程

引言

CMS(Concurrent Mark Sweep)收集器是Java虚拟机中的一款并发收集器,其设计目标是最小化停顿时间,非常适合于对响应时间敏感的应用。与传统的串行或并行收集器不同,CMS能够尽可能地让垃圾收集线程与用户线程同时运行,从而减少应用程序的停顿时间。本文将详细介绍CMS收集器的工作流程。

CMS收集器的基本概念

CMS收集器采用“标记-清除”算法,在整个GC过程中尽量保持与用户线程的并发执行。它由多个阶段组成,每个阶段都有特定的任务,并且根据是否需要暂停用户线程分为两类:需要短暂暂停的阶段和完全并发的阶段。

CMS收集器的工作流程

CMS收集器的操作可以分为四个主要阶段,以及一个额外的重置阶段:

  1. 初始标记 (Initial Mark)

    • 在这个阶段,所有其他线程都会被暂停(“Stop The World”, STW),以便准确记录下直接从GC Roots可达的对象。
    • 这个过程非常快,因为它只需要扫描根节点(如栈帧中的引用、静态变量等),而不需要遍历整个对象图。
  2. 并发标记 (Concurrent Mark)

    • 此时,用户线程恢复运行,垃圾收集器开始从GC Roots出发,沿着对象之间的引用关系递归地访问并标记所有存活的对象。
    • 由于用户线程在继续工作,可能会导致已经标记过的对象状态发生变化,因此需要额外的机制来确保正确性,比如三色标记法中的增量更新或原始快照(SATB)。
  3. 重新标记 (Remark)

    • 为了修正并发标记期间因用户程序继续运行而导致的标记变动,此阶段会再次暂停所有应用线程进行快速的重新标记。
    • 主要处理的是那些在并发标记阶段新增加的引用关系或者删除了原有引用的情况,以保证不会遗漏任何存活对象。
    • 尽管重新标记阶段也会造成短暂的STW,但它的持续时间通常比初始标记稍长一些,不过远远短于并发标记的时间。
  4. 并发清理 (Concurrent Sweep)

    • 用户线程再次恢复运行,垃圾收集器则负责清理掉所有未被标记的对象。
    • 在这个过程中,如果有新创建的对象,它们会被直接标记为黑色(即存活对象),并在当前GC周期内保留下来,这有助于避免这些新对象成为浮动垃圾。
  5. 并发重置 (Concurrent Reset)

    • 最后一步是对本次GC过程中使用的标记数据进行清理和重置,为下次GC做准备。
    • 这一阶段也是完全并发的,不影响应用程序的正常运行。
CMS收集器的特点与挑战
  • 优点

    • 低停顿时间:通过并发执行减少了对用户线程的影响,使得整体停顿时间较短。
    • 高吞吐量:当CPU资源充足时,可以有效地利用多核处理器的优势,提高GC效率。
  • 缺点

    • 对CPU资源敏感:由于需要与用户线程竞争CPU资源,可能导致性能波动。
    • 浮动垃圾问题:在并发标记和清理阶段产生的新垃圾不能立即得到处理,只能等到下一次GC。
    • 空间碎片:使用标记-清除算法容易产生内存碎片,影响后续分配大对象时的成功率。
    • 并发模式失败(Concurrent Mode Failure):如果在并发标记或清理阶段结束前又触发了新的GC,可能不得不进入全局STW状态,用Serial Old收集器来完成剩余的工作。
结语

综上所述,CMS收集器是一个针对低延迟要求而优化的选择,尤其适用于Web服务器、在线交易平台等对响应速度有严格要求的场景。尽管存在一定的局限性,但是通过合理的配置参数调整,可以在很大程度上缓解这些问题,使其更好地服务于实际应用。对于开发者而言,理解CMS收集器的工作原理不仅有助于选择合适的垃圾回收策略,还能帮助更精准地调优JVM性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学课程评价系统:客户服务与教学支持

2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架是属于重量级…

攻防世界web第三题file_include

<?php highlight_file(__FILE__);include("./check.php");if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} ?>惯例&#xff1a; 代码审查&#xff1a; 1.可以看到include(“./check.php”);猜测是同级目录下有一个check.php文…

【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)

文章目录 一 、Anaconda install二、 NIVIDIA driver install三、 Cuda install四、Pytorch install 一 、Anaconda install Step 1 Go to the official website: https://www.anaconda.com/download Input your email and submit. Step 2 Select your version, and click i…

寻找适合小户型的开源知识库open source knowledge base之路

寻找一个开源的知识库&#xff0c;为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中&#xff0c;以便更容易查阅&#xff0c;花更少时间收集、对比版本及分享等一系列管理工作&#xff0c;同时确保在需要时可以相对快速找到有用的资料&…

C语言勘破之路-最终篇 —— 预处理(上)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、预定义符号二、#define定义常量三.、#define定义宏四、带有副作用的宏参数五、宏替换的规则六、宏和函数的对比1.宏的优势2.函数的优…

学习threejs,THREE.RingGeometry 二维平面圆环几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.RingGeometry 圆环几…

Win11系统下Oracle11g数据库下载与安装使用教程

文章目录 一、Oracle下载与安装1.1 解压安装包1.2 开始安装Oracle11g1.2.1 用户 1.3 测试数据库是否配置成功1.4 了解一下 Oracle相关服务1.5 了解Oracle体系结构 二、使用工具连接数据库2.1 PL/ SQL 连接本地oracle 三、PL/ SQL远程访问数据库3.1 可能踩坑问题&#xff08;TNS…

数据结构(Java版)第六期:LinkedList与链表(一)

目录 一、链表 1.1. 链表的概念及结构 1.2. 链表的实现 专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表 1.1. 链表的概念及结构 链表是⼀种物理存储结构上⾮连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。与火车…

从零开始C++棋牌游戏开发之第三篇:游戏的界面布局设计

在游戏开发的旅途中&#xff0c;界面布局设计是一个充满创意和挑战的环节。对于棋牌类游戏而言&#xff0c;界面不仅仅是功能的载体&#xff0c;更是玩家与游戏互动的桥梁。一个清晰、直观且美观的界面可以显著提升游戏的用户体验。 在这篇文章中&#xff0c;我们将从功能需求…

计算机基础知识——数据结构与算法(五)(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据结构与算法…

数据库管理-第275期 Oracle 23ai:画了两张架构图(20241225)

数据库管理275期 2024-12-25 数据库管理-第275期 Oracle 23ai&#xff1a;画了两张架构图&#xff08;20241225&#xff09;1 系统管理分片2 用户定义分片总结 数据库管理-第275期 Oracle 23ai&#xff1a;画了两张架构图&#xff08;20241225&#xff09; 作者&#xff1a;胖…

增强路由器 路由器升级宽带速度

由器中DNS设置 DNS&#xff08;域名系统&#xff09;是什么&#xff1f; DNS将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网。DNS使用UDP端口53。 上网前提是&#xff1a;配置 IPv4地址、子网掩码 、网关、DNS 正确才能够上网 DNS填写规…

stm32制作CAN适配器5--WinUsb上位机编写

上次我们要stm32制作了一个基于winusb有canfd适配器&#xff0c;今天我们来制作一个上位机程序来进行报文收发。 上位机还是用以前写好的&#xff0c;只是更改下dll文件。 项目链接器&#xff0c;输入&#xff0c;附加依赖项中增加winusb.lib winusb初始化&#xff1a;#incl…

谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持

问题现象 在Chrome 高版本上的扩展管理页面&#xff08;地址栏输入chrome://extensions/或者从界面进入&#xff09;&#xff1a; &#xff0c; 可以查看到扩展的情况。 问题现象大致如图: 问题原因 出现此问题的根本原因在于&#xff1a;谷歌浏览器本身的扩展机制发生了…

Vue.js组件(6):echarts组件

1 前言 本章主要对常用的echars图表展示进行基本的组件封装。使用该组件前需要在项目中引入echarts。官网&#xff1a;Apache ECharts npm install echarts --save 2 图表组件 2.1 折线图组件 组件属性&#xff1a;chartId&#xff0c;指定图表挂载div的id&#xff0c;注意不…

MySQL用表组织数据

用表组织数据 文章目录 用表组织数据一.四种完整性约束二.数值类型2-1三.数值类型2-2四.字符串.日期类型五.设置1.设置主键2.设置标识列3.设置非空4.设置默认值 六.主外键建立后注意事项 一.四种完整性约束 1.域完整性 列 域完整性约束方法:限制数据类型,检查约束,外键约束,默…

面试经典问题 —— 最大/小前K个数问题(top - K)问题

目录 常见思路更优的解法&#xff08;面试官喜欢的&#xff09; 常见思路 要选出最小的前K个数首先我们会想到排排升序建大堆&#xff0c;排降序建小堆 一个直观的想法是使用&#xff08;小根堆&#xff09;&#xff0c;起始将所有元素放入堆中&#xff0c;然后再从堆中取出k 个…

外包干了27天,技术退步明显。。。。。

时光荏苒&#xff0c;转眼我已是一个拥有近四年功能测试经验的大专生。20年&#xff0c;我满怀激情地通过校招进入湖南某知名软件公司&#xff0c;期待在这里开启我的职业生涯。然而&#xff0c;长时间的舒适环境让我渐渐失去了前进的动力&#xff0c;技术停滞不前&#xff0c;…

从自动驾驶到具身智能漫谈

0. 简介 从作者的眼光来看自动驾驶和具身智能已经是越来越接近了。无论是技术栈以及实现的最终目的。其实都是希望人在环内。这个是古月直播的文字相关的大致梳理。主要会展开聊一聊自动驾驶的变迁以及作为自动驾驶的从业人员要着重关注的一些技术点 1. 自动驾驶的变迁 在自…

Excel粘贴复制不完整的原因以及解决方法

在数据处理和分析的过程中&#xff0c;Excel无疑是不可或缺的工具。然而&#xff0c;在使用Excel进行复制粘贴操作时&#xff0c;有时会遇到粘贴不完整的情况&#xff0c;这可能会让人感到困惑和烦恼。本文将深入探讨Excel粘贴复制不完整的原因、提供解决方案&#xff0c;并给出…