【JVM】深入理解CMS垃圾收集器

今天来讲一下CMS垃圾收集器,这个划时代的垃圾收集器。

认识CMS

CMS(Concurrent Mark Sweep)收集器是一种以获取 最短回收停顿时间为目标的收集器。

采用标记-清除算法

内存回收过程:

(1)初始标记 CMS initial mark 标记GC Roots直接关联对象,不用Tracing,速度很快 (2)并发标记 CMS concurrent mark 进行GC Roots Tracing (3)重新标记 CMS remark 修改并发标记因用户程序变动的内容 (4)并发清除 CMS concurrent sweep 清除不可达对象回收空间,同时有新垃圾产生,留着下次清理称为浮动垃圾

优点:并发收集、低停顿

缺点:产生大量空间碎片、并发阶段会降低吞吐量

在当今多线程高并发的环境下,为什么初始化标记是单线程的标记?

初始化标记阶段是串行的,这是JDK7的行为。JDK8以后默认是并行的,可以通过参数

-XX:+CMSParallelInitialMarkEnabled控制

CMS的两种模式与一种特殊策略

Backgroud CMS 模式(正常并发模式)

实际上我们回收流程有六个步骤:

(1)初始标记

(2)并发标记

(3)并发预处理

(4)可中止的预处理

(5)重新标记

(6)并发清除

为什么并发标记会多出现两个步骤呢?

我们可以思考一下新老年代他们之间对象相互引用时,CMS垃圾收集器要怎么回收老年代的垃圾,我们如何判断被年轻代的对象引用的老年代对象是可达对象。

例如:当老年代被回收的时候,我们如何判断A对象是存活对象。

其实也很简单我们进行新生代扫描来确定A对象是否为可达对象,这也说明了CMS作为老年代的垃圾收集器却要扫描新生代的原因。(相信你在网上其他文章看见过类似的表达)

问题接着又出现了,我CMS垃圾收集器作为一款只关注最短回收停顿时间的收集器,我却需要进行新生代的扫描,这相当于同时对整个堆进行扫描,STW会非常长。这并不符合CMS设计的初衷

那如何快速扫描新生代呢?

要是新生代的垃圾很少,那么CMS进行扫描岂不是很快,所以CMS先进行一次young GC,就能快速启动老年代的垃圾回收!

所以,CMS有两个参数:

CMSScheduleRemarkEdenSizeThreshold 默认值:2M

CMSScheduleRemarkEdenPenetration 默认值:50%

简单解释这两个参数,一般是组合使用,Eden空间使用超过2M的时候启动可中断的并发预清理(CMS-concurrent-abortable-preclean),到Eden空间使用率到达50%的时候中断(但不是结束),进入Remark(重新标记阶段)。说人话就是新生代的Eden区当空间使用超过2M时,CMS就进入并发预处理模式,在适合时间进行youngGC,当空间可用率到50%就中止,这就解决了如何快速扫描新生代的问题了。

那么这里有的同学会注意到为什么并发预处理前面会有可中断几个字呢?

可中断意味着,预处理是做一些工作的前置准备,但总不能一直准备,所以就设置了一个时间对他进行打断。所以,并发预处理的逻辑是当你发生了minor GC ,我就预处理结束了。举个例子:当你准备学习的时候

JVM的垃圾处理机制
m0_70955866的博客
08-17 780
在C++中,对象所占用的内存,在程序运行完之前是无法被释放掉的,需要程序员编写代码,手动释放内存,这样不仅增加了程序员的工作量,在一定程度上,降低了整体效率。而在JAVA中,当没有对象引用指向原本分配给某个对象的内存时,该内存便会被视为垃圾。而JVM的垃圾回收机制,能在程序运行过程中,不断的清除垃圾,释放内存,从而大大增加了内存使用效率。...
JVM垃圾收集器全面详解
最新发布
03-17
Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾收集器(Garbage Collector, GC)。本文将全面解析JVM中的七种垃圾收集器,分析它们的特性和适用场景,帮助开发者理解如何优化Java应用的内存...
JVM GC算法 CMS 详解(转)
weixin_34259559的博客
09-17 765
前言 CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对tenured generation的回收,也就是年老代的回收,目...
JVM——》CMS
小仙~
04-19 609
CMS官网 一、概念 CMS:Concurrent Mark Sweep CMS收集器是一种以获取 最短回收停顿时间 为目标的收集器。 二、算法 标记-清除 三、过程(步骤) 由于整个过程中,并发标记和并发清除,收集器线程可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行的。 1、初始标记 CMS initial mark 【STW】 标记GC Roots直接关联对象,不用Tracing,速度很快 , 是STW的 2、并发标记 CMS concurrent.
JVM中的cms是什么???
谢彬のCSDN专栏
11-07 2887
现在面对大内存比较流行是是CMS GC(最少1.5才支持),首先明白CMS的全称是什么,不是传统意义上的内容管理系统(Content Management System)哈,第一次我也没看懂,它的全称是:Concurrent Mark Sweep,三个单词分别代表并发、标记、清扫(主意这里没有compact操作,其实CMS GC的确没有compact操作),也就是在程序运行的同时进行标记和清扫
JVM-CMS概述
weixin_47332208的博客
02-28 382
JVM-CMS简单概述
JVM垃圾收集器详解
08-31
JVM垃圾收集器详解】 Java虚拟机(JVM)中的垃圾收集器是负责自动管理内存,特别是Java堆和方法区中的对象实例。它的主要任务是识别并清理不再使用的对象,以便释放内存资源。垃圾收集涉及到三个核心问题:确定...
深入理解G垃圾收集器.docx
11-14
深入理解G1垃圾收集器》 G1垃圾收集器Java 7引入的一个重要特性,自那时起,它在JDK 7及更高版本中可用,并逐渐成为替代CMS垃圾收集器的优选方案。G1的主要创新在于其将堆空间划分为多个独立的区域(Region),...
CMS垃圾收集器1
08-03
4. **并发清理(Concurrent Sweeping)**:这个阶段也是并发的,CMS收集器会清理未被标记的对象,释放内存。由于这个阶段用户线程仍在运行,新的垃圾可能会产生,这部分垃圾将在下一次GC时处理。 5. **预清理...
漫谈Java垃圾收集器.pdf
12-15
Java垃圾收集器Java虚拟机(JVM)中的一种自动内存管理机制,旨在释放程序员从手动内存管理的繁琐工作中解脱出来。垃圾收集器通过跟踪对象的引用关系,确定哪些对象是可以被释放的,然后将其回收,以避免内存泄露...
JVMCMS简述
qq_45888932的博客
06-24 1960
记录CMS的执行流程,卡表和三色标记的使用
jvm cms调优
John_chu的博客
08-17 612
-Xms4096M -Xmx4096M -Xmn3072M -Xss1M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFactory=92 -XX:+UseCMSCompactAtFullCollection -XX:+CMSFullGCsBeforeCompaction=0 -XX:+CMSScavengeBefore.
GC算法CMS算法
一切的困难都来自于自己内心的恐惧
10-11 7151
CMS算法 CMS算法JVM中老年代常用的垃圾回收算法,全称是Concurrent Mark Sweep算法,即并发标记-清除算法算法的执行步骤如下图所示,共有六个步骤。 CMS-Steps 3.1 初始标记(Initial Mark): CMS算法中两个会触发Stop the World事件中的一个,这个阶段会标记所有与GC Roots直接相关联的对象,以及被存活的青年代对象所直...
JVM 详解之 CMS收集器
吉他程序员的博客
07-24 2397
1.CMS触发GC的条件 CMS GC 在实现上分成 foreground collector 和 background collector。foreground collector 相对比较简单,background collector 比较复杂,情况比较多。 foreground collector foreground collector 触发条件比较简单,一般是如下: 老年代没有足够的连续空间分配给晋升的对象(即使总可用内存足够大)。 新生代没有足够的空间分配对象。 老年代没有足够的剩余空间来容纳
G1 GC 并行参数解读
wuzhilon88的专栏
06-15 428
ConcGCThreads是和业务线程并发做的,ParallelGCThreads是暂停时间并行进行的。这种阶段是ParallelGCThreads并行做的。这种阶段是ConcGCThreads这个参数并行的。
Java基础之《JVM性能调优(9)—番外篇为什么CMS会出现内存碎片》
csj50的专栏
03-20 1170
一、CMS为什么会出现内存碎片 经历了并发清除阶段后,垃圾对象都被清除了,剩下内存碎片,碎片化导致内存空间不连续,内存空间白白被占用但没数据。
JVM常用垃圾回收器相关参数配置
自律使我自由
09-24 851
JVM常用垃圾回收期参数配置
CMS垃圾回收器分析常用的垃圾回收算法
WannaRunning的博客
11-05 1971
CMS 的全称是 Mostly Concurrent Mark and Sweep Garbage Collector(主要并发­标记­清除­垃圾收集器),它在年轻代使用复制算法,而对老年代使用标记-清除算法。 那这种回收器有什么优点和缺点,为什么不同代使用不同算法?下面来了解一下 标记(Mark) 垃圾回收的第一步,就是找出活跃的对象;根据 GC Roots 遍历所有的可达对象,这个过程,就叫作标记。 绿色的代表 GC Roots,红色的代表可以追溯到的对象;可以看到标记之后,仍然有多个灰色
CMS总结
weixin_47068446的博客
06-14 1116
CMS CMS的两种模式与一种特殊策略: Backgroud CMS : 实际上我们的并发标记还能被整理成两个流程(1)初始标记 (2)并发标记 (3)并发预处理 (4)可中止的预处理 (5)重新标记 (6)并发清除为什么我们的并发标记细化之后还会额外有两个流程出现呢?讨论这个...
深入理解JVM内存模型与垃圾收集机制
**Garbage Collection Types**:Hotspot JVM中常见的垃圾收集器有Serial GC、Parallel GC、Concurrent Mark Sweep (CMS) 和 G1 (Garbage-First) GC等。这些收集器在并行性、停顿时间、吞吐量和内存占用等方面各有...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 【JVM】深入理解CMS垃圾收集器 825
  • 【JVM】垃圾回收算法 402

分类专栏

  • JVM 2篇

最新评论

  • 【JVM】深入理解CMS垃圾收集器

    qq_38636379: 你好 我想问一个问题:另外,针对并发标记(还有并发清理)开始后产生的新对象,通常的做法是直接全部当成黑色,本轮不会进行清除。关于这句话,我找了好多资料都没有找到是怎么处理新晋升老年代的对象或者因对象过大直接存储在老年代的对象的说明。

大家在看

  • HTTP响应协议详解
  • 本地用ollama部署开源大模型最简单教程(不需要安装docker) Windows, Linux, Mac 1124
  • pytorch-cifar-10的测试集准确率达96.2%,(resnet18且不使用预训练模型)
  • 1315、基于51单片机手动光控定时温控自动窗帘窗户设计(程序+原理图+PCB源文件+proteus仿真+参考论文+开题报告+任务书+数据手册+元器件清单等)
  • 构建基于OAuth2的安全认证与授权体系在淘客返利系统中的应用 1999

最新文章

  • 【JVM】垃圾回收算法
2022年2篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码罗湖模板制作平湖网站优化按天计费吉祥网络推广塘坑网络广告推广龙华网站推广方案石岩营销网站深圳百度爱采购观澜高端网站设计石岩SEO按天收费坑梓网站优化按天扣费广州企业网站设计沙井网站优化按天计费民治百度关键词包年推广民治网站推广系统龙岗网站推广横岗网站搭建民治建设网站坪山网站推广惠州网站建设惠州seo排名坪地建网站罗湖seo广州建站木棉湾seo宝安网站开发民治百度网站优化坂田建设网站观澜网页制作坑梓营销网站龙岗营销型网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化