京东面试:说说CMS工作原理?
CMS(Concurrent Mark Sweep)垃圾收集器是以“最短的停顿”著称的垃圾回收器,因此也是 JDK 9 之前使用最广泛的垃圾回收器之一。那么,问题来了,为什么 CMS 能实现最短停顿时间?CMS 垃圾回收器的工作原理又是啥呢?接下来,我们一起来看。
CMS 工作原理
CMS 之所以能实现最短停顿时间是和它的工作原理分不开的,它们存在因果关联关系,因为 CMS 的工作原理,所以决定了 CMS 能实现最短的停顿时间。
“最短停顿时间”指的是垃圾回收过程中,应用程序暂停的时间尽可能短。也就是在垃圾回收时,Stop The World(STW,全局停顿)时间要尽量短,因为只有 STW 够短,那么应用程序才能更快的执行。
那么 CMS 工作原理是啥呢?
CMS 垃圾回收器执行步骤分为以下两步:
- 标记
- 清除
而在以上过程中,“标记”阶段是需要大量时间的,反而“清除”需要的时间比较短(因为清除只需要把垃圾对象删除“回收”即可)。
那怎么才能提升整体的执行效率,保证最短的停顿时间呢?
于是 CMS 设计者开始动脑子了,这时候有人就提出:既然“标记”阶段比较费时,那我们就将“标记”阶段分阶段处理好了,并且最好能让他能与应用线程一起执行,这样就不需要 STW(全局停顿)了,那么停顿时间不久短了嘛?
因此 CMS 的设计者将垃圾回收的“标记”阶段,变成了以下 3 个阶段:
- 初始标记(STW):只标记和 GC Roots 直接关联的对象,执行速度很快。
- 并发标记(和用户线程并发执行):GC Roots 直接关联的对象继续往下(一直)遍历和标记,耗时会比较长。
- 重新标记(STW):对上一步“并发标记”阶段因为用户线程执行,而导致变动的对象进行修正标记。
具体执行流程如下:

在整个标记的过程中,只有初始标记和重新标记需要 STW,但是初始标记只标记和 GC Roots 直接关联的对象,而重新标记只是对“并发标记”阶段的用户线程进行修正标记,因此这两个阶段执行的时间都很短,所以整个 STW 停顿时间也就很短。
并且为了让 CMS 能够拥有更短的停顿时间,所以在“标记”阶段完成之后,CMS 采用的是并发清除策略,也就是 GC 垃圾回收线程和用户线程一起执行,这样就不需要 STW 了,所以执行效率就更高了。
CMS 完整执行流程如下:
- 初始标记(STW):只标记和 GC Roots 直接关联的对象,执行速度很快。
- 并发标记(和用户线程并发执行):GC Roots 直接关联的对象继续往下(一直)遍历和标记,耗时会比较长。
- 重新标记(STW):对上一步“并发标记”阶段因为用户线程执行,而导致变动的对象进行修正标记。
- 并发清除(和用户线程并发执行):使用并发-清除算法将垃圾对象进行清除。
执行流程如下图所示:

课后思考
虽然 CMS 能实现最短停顿时间,但它也存在一些缺点,例如:会内存碎片的问题。那为什么它会有内存碎片的问题?又怎么能解决内存碎片的问题?
本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。
京东面试:说说CMS工作原理?的更多相关文章
- JVM工作原理和特点(一些二逼的逼神面试官会问的问题)
作为一种阅读的方式了解下jvm的工作原理 ps:(一些二逼的逼神面试官会问的问题) JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完毕,通过以下4步来完毕JVM环境. ...
- 面试:Handler 的工作原理是怎样的?
面试场景 平时开发用到其他线程吗?都是如何处理的? 基本都用 RxJava 的线程调度切换,嗯对,就是那个 observeOn 和 subscribeOn 可以直接处理,比如网络操作,RxJava 提 ...
- 面试官:你分析过mybatis工作原理吗?
Mybatis工作原理也是面试的一大考点,必须要对其非常清晰,这样才能怼回去.本文建立在Spring+SpringMVC+Mybatis整合的项目之上. 我将其工作原理分为六个部分: 读取核心配置文件 ...
- php面试专题---21、MVC框架基本工作原理考察点
php面试专题---21.MVC框架基本工作原理考察点 一.总结 一句话总结: 会的东西快速过,不要浪费时间,生命有限,都是一些很简单的东西. 1.mvc框架单一入口的 优势 是什么? 可以进行统一的 ...
- Java面试必问之线程池的创建使用、线程池的核心参数、线程池的底层工作原理
一.前言 大家在面试过程中,必不可少的问题是线程池,小编也是在面试中被问啥傻了,JUC就了解的不多.加上做系统时,很少遇到,自己也是一知半解,最近看了尚硅谷阳哥的课,恍然大悟,特写此文章记录一下!如果 ...
- 笔面试复习(spring常用.jar包/事务/控制反转/bean对象管理和创建/springMVC工作原理/sql查询)
###spring常用jar包1.spring.jar是包含有完整发布模块的单个jar包.2.org.springframework.aop包含在应用中使用Spring的AOP特性时所需要的类.3.o ...
- PHP面试系列 之框架(一)---- MVC框架基本工作原理
题:谈谈你对MVC的认识,介绍集中目前比较流行的MVC框架 考点: (1)MVC工作原理 (2)常见MVC框架 延伸: (1)单一入口的工作原理 (2)模板引擎的理解 (1)MVC工作原理 Model ...
- 面试系列22 dubbo的工作原理
(1)dubbo工作原理 第一层:service层,接口层,给服务提供者和消费者来实现的 第二层:config层,配置层,主要是对dubbo进行各种配置的 第三层:proxy层,服务代理层,透明生成客 ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 详解Java GC的工作原理+Minor GC、FullGC
详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...
随机推荐
- 自定义U盘图标
有没有想过你可以自定义U盘的图标 我才不想用这么Low的图标: 我的图标是这样的: 不好意思,本人叫郭飞,嘻嘻... 下面给出教程: 1.U盘里新建文件autorun.inf,并用记事本打开进行编辑 ...
- 更难、更好、更快、更强:LLM Leaderboard v2 现已发布
摘要 评估和比较大语言模型 (LLMs) 是一项艰巨的任务.我们 RLHF 团队在一年前就意识到了这一点,当时他们试图复现和比较多个已发布模型的结果.这几乎是不可能完成的任务:论文或营销发布中的得分缺 ...
- 高通 LK阶段配置使用I2C-8
以MSM8953为例. 原文(有删改):https://blog.csdn.net/qq_29890089/article/details/108294710 项目场景 因为项目需要,需要在高通MSM ...
- 国产芯片!EtherCAT主站和瑞芯微RK3568融合,引领智能化升级!
转载自:北京盟通科技 盟通成果 随着工业智能化的迅猛推进,国产芯片作为我国自主创新的重要成果,正逐渐崭露头角.在实现工业智能化的过程中,EtherCAT主站技术的应用也愈发重要.盟通此次将瑞芯微国产开 ...
- VulnHub_DC-1渗透流程
DC-1 DC-1 是一个专门建造的易受攻击的实验室,目的是在渗透测试领域获得经验. 它旨在为初学者提供挑战,但它的难易程度取决于您的技能和知识,以及您的学习能力. 要成功完成此挑战,您将需要 Lin ...
- Eggjs 设置跨域请求 指定地址跨域 nodejs
首先egg自身框架没有直接设置允许跨域请求的功能和接口,所以需要第三方包来设置跨域请求! 先安装第三方包来设置跨域,使用egg-cors // npm npm i egg-cors --save // ...
- CF2B
非常恶心的dp题,测试数据也恶心,坑多,特别是0的坑 #include <iostream> #include <utility> #include <string> ...
- Sonar 扫描之分析参数介绍
Sonar扫描之分析参数介绍 强制参数 服务器 Key 描述 默认 sonar.host.url 服务器网址 http://localhost:9000 项目配置 Key 描述 默认 sonar.pr ...
- 涨见识了!脱离vue项目竟然也可以使用响应式API
前言 vue3的响应式API大家应该都特别熟悉,比如ref.watch.watchEffect等.平时大家都是在vue-cli或者vite创建的vue项目里面使用的这些响应式API,今天欧阳给大家带来 ...
- 读论文《基于 GA - BP 的汽车行李箱盖内板冲压成形工艺优化》 —— 如何使用AI技术优化模具产业中工件冲压工艺
最近到了模具公司工作,本来以为身边同事对模具生产和工件生产的流程(大致流程)会比较了解,结果一问才知道基本都是一问三不知,大家都在模具公司工作但是貌似很多人干的和模具生产和工件制造的工作关联性并不强, ...