JVM-GC-CMS垃圾回收器

JVM-CMS垃圾回收器

CMS垃圾回收的步骤

1. 初始标记(InitialMarking)
  1. 这是一个STW的过程,并行标记,只是标记GC Roots能直接关联到的对象。
  2. 由于GC Root直接关联的对象少,因此STW时间比较短。
2. 并发标记
  1. 非STW的过程,并发标记,业务线程和GC线程同时运行,由CPU进行调度。这里标记的算法是三色标记算法
  2. 由于并发标记,在标记过程中会导致对象之间的引用发生变化,采用增量更新方法解决这个问题
3. 重新标记
  1. STW的过程,重新标记在并发标记过程中引用发生了变化或者新产生的对象。主要包括:
  2. 年轻代对象晋升到老年代,可能产生新的存活对象;
  3. 大对象直接被分配到老年代,可能产生新的存活对象;
  4. 老年代和年轻代对象的引用关系发生变化
4. 并发清除
  1. 最后,GC线程会清除不再被引用的对象,并回收他们占用的内存空间
  2. 非STW,由于前面的标记阶段已经将还在使用的对象标记了出来
  3. 在此过程中新产生的垃圾只能等待下次GC

CMS特点与问题

  1. Concurrent mark sweep并发标记清除,在CMS之前都是STW的。
  2. 浮动垃圾问题
  3. CPU要求高:CMS默认启动的回收线程数为(CPU数量+3)/4,当CPU不足4个时候,效率低
  4. 标记清除算法导致内存碎片化严重

小结:CMS从提出概念到实际完成用了10年多的时间,在此之前没有过并发回收的垃圾回收器,因此它是一个垃圾回收器的里程碑,后来的G1也是基于CMS做的一些改进。由于CMS是并发清除的新时代,它也存留了很多问题,JDK任何版本都不会使用CMS作为默认垃圾回收器。

三色标记算法

  1. 它是一个标记算法,不负责清除。
  2. 从root开始遍历链表,并用白、灰、黑三种颜色来标记对象的状态。
  3. 没有被标记过的为白色;被标记过但是没有遍历完其子节点的标记为灰色;对象本身及其子节点都被遍历过的标记为黑色。
  4. 多标问题:在标记完成后对象引用断开,被引用对象变为垃圾对象,但是已经被标记过了,产生浮动垃圾,这个问题并不大,等待下次GC即可
  5. 漏标问题:至少有一个黑色对象新增了对白色对象的引用,所有灰色对象指向该白色对象的引用都断开了,这个问题比较严重,CMS使用增量更新的方法解决。

CMS如何解决漏标问题

incremental update:增量更新,关注引用的增加,如果要给黑色对象引用增加,将黑色对象标记为灰色

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

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

相关文章

0-30 VDC 稳压电源,电流控制 0.002-3 A

怎么运行的 首先,有一个次级绕组额定值为 24 V/3 A 的降压电源变压器,连接在电路输入点的引脚 1 和 2 上。(电源输出的质量将直接影响与变压器的质量成正比)。变压器次级绕组的交流电压经四个二极管D1-D4组成的电桥整流。桥输出端…

ETO MARKETS:美股涨势告急?通胀风暴或成市场新拐点

摘要: 近期美股涨势引发了市场对其可持续性的质疑。随着通胀数据的发布,全球利率前景可能面临新的变化。投资者需关注即将到来的通胀数据及其对市场的影响。本周的市场波动加剧,政治风险和经济数据共同作用,将为未来的市场走向提…

React 扩展

文章目录 PureComponent1. 使用 React.Component,不会进行浅比较2. 使用 shouldComponentUpdate 生命周期钩子,手动比较3. 使用 React.PureComponent,自动进行浅比较 Render Props1. 使用 Children props(通过组件标签体传入结构&…

解释JVM参数的作用及其对程序性能的影响。

JVM参数是Java虚拟机(JVM)在运行时配置的一种方式,用于影响Java应用程序的性能、内存使用、垃圾收集等。这些参数的选择对程序的性能有显著的影响。以下是几个常见的JVM参数及其作用及其对程序性能的影响: 1. **堆大小&#xff0…

十大排序算法之->基数排序

一、计数排序简介 基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是用0-9之间的所有整数作为键值,对数据集中的每一个数,按照从…

Vue.js开发中基于localStorage与sessionStorage的本地存储利器:Vue-ls插件使用详解

文章目录 一、介绍二、安装三、使用1、在main.js中导入插件并配置2、在组件中使用3、全局使用3、上下文使用 四、API1、获取数据2、设置数据3、移除数据4、清空数据5、监听数据6、移除监听 五、使用示例1、单独的 js 文件2、使用方法 六、typescriptvue3使用vue-ls1、新建 stor…

【SDV让汽车架构“和而不同”】

昔日以“排气管数量”和“发动机动力”为骄傲的荣耀已然成为过往。在这个崭新的时代,特斯拉、理想、蔚来、小鹏、零跑等新兴的汽车制造商纷纷推出了搭载可交互大屏、实现万物互联、软件功能持续更新的新车型,它们被誉为“车轮上的智能手机”。同时&#…

【方案】基于5G智慧工业园区解决方案(PPT原件)

5G智慧工业园区整体解决方案旨在通过集成5G通信技术、物联网、大数据和云计算等先进技术,实现园区的智能化、高效化和绿色化。 该方案首先构建高速、稳定的5G网络,确保园区内设备、人员与物流的实时连接和高效沟通。其次,通过工业物联网技术&…

行业观察丨服装品牌着重点:电商的数据采集与数据分析

互联网爆发的各行业,关注在生产、销售、穿着以及后续的处理过程中存在的问题,希望能对会员企业乃至整个社会贡献出自己的一份力量。让我们共同思考,作为品牌企业或者个体,如何抓住新趋势。 做渠道价格的治理需要品牌对线上数据尽数…

代码随想录算法训练营day47

题目:188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费 参考链接:代码随想录 188.买卖股票的最佳时机IV 思路:本题和上题的最多两次买卖相比,改成了最多k次,使用类似思路&…

MATLAB复习

MATLAB常用的标点符号 空格 变量分隔符 矩阵一行中各元素间的分隔符 程序语句关键词分隔符 逗号,分隔显示计算结果的各语句 变量分隔符 矩阵中一行各元素的分隔符点号.数值中的小数点 结构数组的域访问符分号;分隔不想显示计算结果的各语句 矩阵行与行的…

2024上海CDIE 参展预告 | 一站式云原生数字化平台已成趋势

为什么企业需要进行数字化转型?大家都在讨论的数字化转型面临哪些困境?2024.6.25-26 CDIE数字化创新博览会现场,展位【A18】,期待与您相遇,共同探讨企业如何利用数字化技术驱动业务增长。 一、展会介绍——CDIE数字化…

web后端

Web后端开发是Web应用开发的重要组成部分,主要负责处理Web应用的后端逻辑和数据存储。后端开发人员需要根据需求和设计文档,设计和开发Web应用的后端逻辑,包括数据处理、业务逻辑和API接口等。他们还需要设计和管理Web应用的数据库&#xf…

PDF秒变翻页式电子画册

​在当今数字化时代,将PDF文档转换成翻页式电子画册是一种提升作品展示效果和传播效率的有效方式。以下是将PDF秒变翻页式电子画册的攻略,帮助您轻松掌握数字创作技巧。 首先,选择一个合适的制作工具是关键。目前市场上有多种在线平台和软件可…

图像识别技术在人脸识别领域的新突破

图像识别技术在人脸识别领域的新突破主要体现在多个方面,这些突破不仅提高了人脸识别的准确性和效率,还拓展了其应用领域。以下是对这些新突破的详细归纳: 深度学习技术的应用: 深度学习技术,特别是卷积神经网络&…

内网穿透是什么?为什么需要内网穿透?小白也能看懂!

内网穿透是什么?为什么需要内网穿透?小白也能看懂! 通俗易懂的说法 内网穿透,就像是你家里的后院有一个宝藏,但是这个宝藏只有住在你家的人才能看得到。现在,你想让住在远处的朋友也能欣赏到这个宝藏&…

输入系统和应用编程

目录 一、输入设备和输入系统 1.什么是输入设备? 2.什么是输入系统? 二、输入系统框架及调试 1.框架概述 2.编写 APP 需要掌握的知识 (1)内核中怎么表示一个输入设备? (2)APP 可以得到什…

IK分词器热刷新词库实践分享

目录 前言 什么是分词器? ik分词器简介 ik分词器和默认分词器的对比 ik分词器介绍 ik分词器的分词问题 自定义词库 主配置解说 通过配置文件自定义词库 Step1: 新建自定义分词库 Step2: 将我们的自定义词添加到ik的配置文件中 Step3: 重启es,…

黑盒测试中的完整性测试:确保系统的功能完整性

在软件开发过程中,为了保证系统的质量和可靠性,测试是一个不可或缺的环节。而黑盒测试作为常用的测试方法之一,以用户的角度出发,测试系统在不知道内部工作原理的情况下,对输入数据的处理和输出结果的正确性进行验证。…

react+ts 使用webp格式的图片处理

需求: 公司官网大图内存较大加载很慢,于是用webp格式的图片来替换原来的图片,在React项目中,如果你使用的是Create React App(CRA)或Webpack进行项目构建,遇到的常见错误原因可能涉及以下几点&a…