CMS GC的步骤

JVM 面试必问的 CMS,你懂了吗? 前言 虽然 CMS 已经是很古老的垃圾回收器了,大家现在动不动就G1、ZGC啥的,但是据我所了解,还是有很多公司的生产环境主要使用的 CMS,包括我自己呆过的几家大厂也是。 因此在 JVM 面试中,CMS 也是问的最多的,包括我自己现在面试别人时,问到 JVM 这一块,我也喜欢从CMS开始,逐渐深入。 不多废话,今天我们就来盘他。 正文 1、什么是卡表(card table)? 试想一下,在进行 YGC 时,如何判断是否存在老年代到新生代的引用? 一个简单的办法是扫描整个老年代,但是这个代价太 阅读详情
  1. 初始化标记---》
    1. 标记老年代中所有的GC Roots对象,如下图节点1;
    2. 标记年轻代中活着的对象引用到的老年代的对象

     

  2. 并发标记

    1、从“初始标记”阶段标记的对象开始找出所有存活的对象;
    2、并发标记阶段只负责将引用发生改变的Card标记为Dirty状态,不负责处理

     

     

  3. 预清理阶段

    用来处理前一个阶段因为引用关系改变导致没有标记到的存活对象的,它会扫描所有标记为Direty的Card

     

  4. 可终止的预处理

    这个阶段尝试着去承担下一个阶段Final Remark阶段足够多的工作。
    这个阶段持续的时间依赖好多的因素,由于这个阶段是重复的做相同的事情直到发生aboart的条件
    (比如:重复的次数、多少量的工作、持续的时间等等)之一才会停止。
    ps:此阶段最大持续时间为5秒,之所以可以持续5秒,另外一个原因也是为了期待这5秒内能够发生一次ygc,
    清理年轻带的引用,是的下个阶段的重新标记阶段,扫描年轻带指向老年代的引用的时间减少;
    

     

  5. 重新标记

    阶段的任务是完成标记整个年老代的所有的存活对象

     

  6. 并发清理

    通过以上5个阶段的标记,老年代所有存活的对象已经被标记
    并且现在要通过Garbage Collector采用清扫的方式回收那些不能用的对象了。
    这个阶段主要是清除那些没有标记的对象并且回收空间;
    
    由于CMS并发清理阶段用户线程还在运行着,伴随程序运行自然就还会有新的垃圾不断产生,
    这一部分垃圾出现在标记过程之后,CMS无法在当次收集中处理掉它们,只好留待下一次GC时再清理掉。
    这一部分垃圾就称为“浮动垃圾”
    

     

  7. 并发重置 

    这个阶段并发执行,重新设置CMS算法内部的数据结构,准备下一个CMS生命周期的使用。

     

83245.952: [GC (CMS Initial Mark) [1 CMS-initial-mark: 1619782K(2023424K)] 1686491K(2722496K), 0.0077340 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
83245.960: Total time for which application threads were stopped: 0.0094512 seconds, Stopping threads took: 0.0000811 seconds
83245.960: [CMS-concurrent-mark-start]
83246.101: [CMS-concurrent-mark: 0.140/0.140 secs] [Times: user=0.16 sys=0.00, real=0.14 secs]
83246.101: [CMS-concurrent-preclean-start]
83246.106: [CMS-concurrent-preclean: 0.005/0.005 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
83246.106: [CMS-concurrent-abortable-preclean-start]
83249.717: [CMS-concurrent-abortable-preclean: 3.609/3.611 secs] [Times: user=3.89 sys=0.04, real=3.61 secs]
83249.719: [GC (CMS Final Remark) [YG occupancy: 248182 K (699072 K)]83249.719: [Rescan (parallel) , 0.0364698 secs]83249.755: [weak refs processing, 0.0005544 secs]83249.756: [class unloading, 0.0361213 secs]83249.792: [scrub symbol table, 0.0085194 secs]83249.800: [scrub string table, 0.0014245 secs][1 CMS-remark: 1619782K(2023424K)] 1867964K(2722496K), 0.0989427 secs] [Times: user=0.21 sys=0.00, real=0.10 secs]
83249.818: Total time for which application threads were stopped: 0.1008135 seconds, Stopping threads took: 0.0001093 seconds
83249.818: [CMS-concurrent-sweep-start]
83250.378: [CMS-concurrent-sweep: 0.560/0.560 secs] [Times: user=0.61 sys=0.00, real=0.56 secs]
83250.379: [CMS-concurrent-reset-start]
83250.383: [CMS-concurrent-reset: 0.004/0.004 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
 

CMS垃圾收集器详解(转载) CMS垃圾回收器设计目的:为了避免「老年代 GC」出现「长时间」的卡顿(Stop The World)CMS垃圾回收器回收过程:初始标记、并发标记、并发预处理、重新标记和并发清除。初始标记以及重新标记这两个阶段会Stop The WorldCMS垃圾回收器的弊端:会产生内存碎片&&需要空间预留:停顿时间是不可预知的。 阅读详情

相关推荐

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

CMS GC过程

一.什么是CMS收集器 CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上**-XX:+UseConcMarkSweepGC** ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。 二.CMS工作步骤 初始标记(STW initial mark) 并发标记(Concurrent marking) 并发预清理(Concurrent preclea

黄国攀的博客 5323

ZynqMP多核实战:如何让A53-0跑Linux,其他核裸机处理大数据(附完整配置流程)

本文详细解析了Xilinx ZynqMP多核异构计算实战,重点介绍如何配置A53-0运行Linux系统,同时让其他A53和R5核心以裸机方式处理大数据任务。内容涵盖内存划分、核间通信、Linux定制配置等关键技术,提供完整的配置流程和性能优化方案,助力开发者实现高效的多核协同开发。

weixin_30555125的博客 479

垃圾回收之CMS GC

一.六个阶段 阶段 1: Initial Mark(初始标记) 这个阶段伴随着 STW 暂停。初始标记的目标是标记所有的 根对象,包括根对象直接引用的对象,以及被年轻代中所 有存活对象所引用的对象(老年代单独回收)。 阶段 2: Concurrent Mark(并发标记) 在此阶段,CMS GC 遍历老年代,标记所有的存活对象,从 前一阶段 “Initial Mark” 找到的根对象开始算起。 “并发标 记”阶段,就是与应用程序同时运行,不用暂停的阶段。 阶段 3: Concurre.

suxiao_21的博客 2507

claude使用教程

提供了三种模型:claude,codex, gemini,三种模型都共用同一个apikey, 有开发需求使用claude效果较好,知识问答等场景gemini效果会更好些,本文只提供了claude的安装方式,剩下两种按需按照以下参考链接安装下即可,安装有问题参考文档:https://www.aicodemirror.com/dashboard/official-installation/macos-linux (不需要挂梯子,自己手机号注册就好)

lichao19871216的博客 3493

新手必看:如何用T265和ROS实现无人机室内精准定位(附PX4参数配置)

本文详细介绍了如何使用Intel Realsense T265和ROS实现无人机室内精准定位,包括硬件准备、ROS数据流架构设计、PX4参数配置及系统验证。特别针对视觉SLAM技术在室内环境中的应用,提供了从零搭建到进阶优化的全流程解析,适合无人机开发新手快速上手。

weixin_30642561的博客 404

CMS GC 垃圾回收详解

前言 转载请注明来源 本篇不是一篇详细的教学,不会去介绍JVM内存模型相关的知识点,虽然这是理解GC必须的知识点,学习了解GC算法前,可以先吃一波我的安利:<深入理解Java虚拟机>,这本书作为对Java虚拟机的入门书是非常非常好的,同时,本篇也偏向于个人的一个笔记(目前个人水平有限,做不到对CMS GC 以及 JVM相关知识做系统性的详细解读),仅提供一种直观的方式去展示以及解析CMS GC是如何运作的. HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿

yygr的博客 591

Unreal5从入门到精通之如何解决在VR项目在头显中卡顿的问题

以前我们使用Unity开发VR,Unity提供了非常便利的插件和工具来做VR。但是由于Unity的渲染效果不如Unreal,现在我们改用Unreal来做VR了,所有的VR相关的配置和操作都要重新学习。今天就来总结一下,我在开发VR过程中碰到的所有问题。好了,以上就是我目前做VR时碰到的一些问题,希望对你有所帮助。

TxNet 2482

老大难的GC原理及调优,这下全说清楚了

概述 本文介绍GC基础原理和理论,GC调优方法思路和方法,基于Hotspot jdk1.8,学习之后将了解如何对生产系统出现的GC问题进行排查解决 阅读时长约30分钟,内容主要如下: GC基础原理,涉及调优目标,GC事件分类、JVM内存分配策略、GC日志分析等 CMS原理及调优 G1原理及调优 GC问题排查和解决思路 GC基础原理 1 GC调优目标 大多...

weixin_30718391的博客 669

【DeepSeek R1构建本地RAG知识库】数据结构化清洗-工作流自动清洗

在构建本地RAG知识库时,数据结构化清洗是关键但繁琐的步骤。传统方法效率低且易出错,而低代码/无代码平台如Dify提供了更高效的解决方案。Dify通过可视化工作流设计,集成大模型智能处理,支持多格式输入输出,无需编码即可完成复杂的数据清洗任务。文章详细介绍了数据结构化的核心困境、目标、价值及类型,并比较了TXT与Markdown在RAG系统中的适用性。最后,通过Dify平台实战演示了如何在20分钟内完成规则制度文档的结构化清洗,输出标准化数据,展示了自动化工作流在数据处理中的高效性和便捷性。

少说,多做 1222

VTK API 详解(115):vtkScalarBarActor - 显示颜色条

显示用于颜色映射的标量值范围。自动从vtkMapper中提取。可设置颜色条的位置、大小、字体、标签格式等。支持横向或纵向显示颜色条。是进行科学数据伪彩色可视化时非常重要的辅助工具,它能让用户直观地理解不同颜色代表的数值大小。通过灵活设置颜色表、标题、标签数量等,可以适配多种可视化需求。

yumeiguo的博客 488

JVM调优:选择合适的GC collector (三)

CMS Collector 在很多地方,CMS Collector常被翻译成“并发”,而ParallelGC被称为“并行”,但中文里,这两词的区分度并不明显。事实上,所谓的Parallel是指,在执行GC的时候将会有多个GC线程共同工作,但是,在执行GC的过程中仍然是“stop-the-world”。CMS的区别在于,在执行GC的时候,GC线程是不需要暂停application的线程,而是和它们“并发”一起工作。 所以,采用CMS的原因就在于它可以提供最低的pause time。 回到CMS的示意图:

智障大师 的专栏 2万+

sphincs+ Nist Round3文档中文译版(SPHINCS+ Submission to the NIST post-quantum project, v.3)

1. 引言 哈希基础签名方案最初是由Lamport [14]在1970年代后期作为一次性签名方案开发的,并由Merkle [16]扩展为多次签名方案。这些方案的安全性易于分析,并仅依赖于所使用的哈希函数的属性。然而,Merkle基于树的签名方案需要在密钥生成时就确定要进行签名的数量,且为了保持性能这个数字要小。最重要的是,该系统需要用户记住一个状态:这个状态包含一些信息以记住密钥已经进行了多少次签名。 在Lamport方案诞生后的40年里,产生了许多想法改进了哈希基础签名的性能、实用性和理论基础,最终XMS

dedanddwb的博客 394

Springboot 如何配置GC,CMS如何使用

本文主要讨论了CMS(Concurrent Mark Sweep)垃圾回收器的使用方法和调优建议。常见的应用程序类型,例如Web、后台处理和事务型应用程序都需要根据实际情况进行不同的参数设置,以最大化CMS在Java虚拟机中的性能表现。这还需要监控和分析工具来优化垃圾回收性能,并最终做出最佳的决策。

hpraise的博客 2412

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

GC之详解CMS收集过程和日志分析

转自:http://www.cnblogs.com/zhangxiaoguang/p/5792468.html 参考:(1)http://blog.youkuaiyun.com/fenglibing/article/details/6321453             (2)http://www.cnblogs.com/wjoyxt/p/3727331.html 2016-08-23   关于GC

无梦者追梦 7032

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

理解CMS GC日志

本文翻译自:https://blogs.oracle.com/poonam/entry/understanding_cms_gc_logs准备工作JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateSt...

hellozhxy的博客 261

CMS垃圾回收过程详解:为什么分成四步

垃圾回收的核心目标是回收不再使用的内存对象,并使其内存空间可供新对象使用。不同的垃圾回收算法根据性能、停顿时间、吞吐量等要求设计了不同的内存回收策略。Serial GC:单线程执行垃圾回收,适用于小型应用。:多线程并行执行,适合高吞吐量应用。G1 GC:控制停顿时间的垃圾回收器,适用于大内存应用。CMS GC(Concurrent Mark-Sweep Garbage Collector)是其中的一种,以低停顿时间为核心目标,适用于对延迟敏感的应用场景,如Web服务器、金融交易系统等。

lssffy的博客 945

java 程序执行后 强制gc_快速理解Java垃圾回收奥秘(GC)

引子说到虚拟机的垃圾回收机制,学过JVM的同学可能都略知一二。Eden、Survivor、Minor GC、G1这个名词萦绕耳边,但往往又无法详细的描述清楚,下面我们就GC的原理做一些讲解,清晰的记住下面几点有助于帮助你理解JVM。正文1、GC的概念(1)GC:Garbage Collection垃圾收集。这里所谓的垃圾是指系统运行过程中在Java堆中所产生的一些无用的对象,这些对象占据着一定的内...

weixin_39927508的博客 9265

CMS垃圾回收器和G1垃圾回收器区别_g1cms垃圾回收器区别

因此对于老年代来说,引用了老年代中对象的新生代的对象,也会被老年代视作“GC ROOTS”:当此阶段耗时较长的时候,可以加入参数-XX:+CMSScavengeBeforeRemark,在重新标记之前,先执行一次ygc,回收掉年轻带的对象无用的对象,并将对象放入幸存带或晋升到老年代,这样再进行年轻带扫描时,只需要扫描幸存区的对象即可,一般幸存带非常小,这大大减少了扫描时间。即,每一个Region,它要么是young的,要么是old的。每一个分配的Region,都可以分成两个部分,已分配的和未被分配的。

2401_89191885的博客 1215

JVM GC耗时频频升高,这次排查完想说:还有谁?

1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放

代码界的扛把子 199

GC调优步骤&&GC常用参数

GC调优步骤 1.打印GC日志 Tomcat可以直接加载JAVA_OPTS变量里 2.分析日志得到关键性指标 3.分析GC原因,调优JVM参数 1.Parallel Scavenge收集器(默认) 分析parallel-gc.log 第一次调优,设置Metaspace大小:增大元空间大小-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize...

java技术专家全栈成长之路 910

java gc什么时候回收内存_垃圾回收 什么时候触发GC?

内存模型相关 什么时候触发GC?内存模型相关参考:点击打开链接CMS垃圾回收器 Concurent Marked Sweep并行的标记垃圾回收器获取最短停顿的回收器, 标记清除算法实现缺点是:1.对cpu资源敏感2.无法处理浮动垃圾3.有大量碎片产生六个步骤1. 初始标记初始标记会触发 stop the world ,从垃圾回收的根对象开始查找,这个过程会暂停整个JVM,但是很快结束2.并行标记...

weixin_36031812的博客 1441

CMS垃圾收集器详解

因此对于老年代来说,引用了老年代中对象的新生代对象,也会被老年代视作“GC ROOTS”。CMS前五个阶段都是标记存活对象的,除了“初始标记”和“重新标记”阶段会stop the word ,其它三个阶段都是与用户线程一起运行的,就会出现这样的情况:gc线程正在标记存活对象,用户线程同时从年轻代向老年代提升新的对象,清理工作还没有开始,old gen已经没有空间容纳更多对象了,这时候就会导致concurrent mode failure, 然后就会使用串行收集器回收老年代的垃圾,导致停顿的时间非常长。

cxbtdd的博客 1992

CMS 垃圾回收的一些细节

1. Full GC(Allocation Failure)日志的触发时机 2021-10-28T23:08:43.523-0800: [Full GC (Allocation Failure) Allocated 0 objects, 0 bytes concurrently2021-10-28T23:08:43.523-0800: [CMSlevel=1 invoke=2 size=10402021-10-28T23:08:43.529-0800: [CMS-concurrent-mark: .

yisaca的博客 489

JVM调优6大步骤

直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详 JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法、垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置 JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.F...

weixin_30488313的博客 123

ParNew和CMS垃圾回收器组合

8.5.3. ParNew和CMS垃圾回收器组合 8.5.3.1. ParNew和CMS垃圾回收器组合 1)工作地点 ParNew垃圾回收器工作在年轻代,而CMS工作在老年代。 2)工作原理 当使用ParNew垃圾回收器时:首先在用户线程处于安全的时候执行STW(stop-the-world),这个时刻称为安全点,执行STW时用户线程会暂停执行,同时会有多个线程来并行清理垃圾,垃圾清理的算法是Copying拷贝算法。ParNew与Parallel Scavenge十分相似,ParNew是Parallel S

Waiting_Mr_Liu的博客 2390
上一篇: synchronized 锁升级之后,怎么降级
下一篇: G1垃圾回收器步骤
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值