CMS垃圾回收器中的标记-清除逻辑与并发处理机制

冰川箭仙

冰川箭仙

2026-06-25

233人浏览

原创

cms采用并发标记-清除算法,通过写屏障与卡表实现增量更新以避免漏标,重新标记仅扫描脏卡页、新生代及跨代引用对象,清除阶段允许浮动垃圾和内存碎片以换取零停顿。

cms垃圾回收器中的标记-清除逻辑与并发处理机制

标记-清除是核心,但不是简单两步

CMS 的“标记-清除”不是串行执行的朴素算法,而是被拆解为多个精细阶段,并嵌入并发控制逻辑。它不压缩内存、不移动对象,所以必须靠“标记”精准识别存活对象,再靠“清除”回收未标记空间。关键在于:**标记必须完整,否则会误删存活对象;清除必须安全,否则会干扰正在运行的应用线程。** 这就引出了并发处理机制——在用户线程不停止的前提下,保证标记结果最终一致。

并发标记如何避免漏标?靠写屏障 + 卡表

并发标记阶段,用户线程照常修改引用(比如把老年代对象 A 的字段指向新对象 B),而 GC 线程可能已扫过 A,导致 B 被漏标。CMS 用“增量更新(Incremental Update)”配合写屏障解决:

  • 当用户线程修改老年代对象的引用字段时,JVM 通过写屏障拦截该操作
  • 将该对象所在的内存页(称为“卡页”,Card)标记为“脏(Dirty)”并记录在卡表(Card Table)中
  • 后续重新标记阶段只需扫描这些脏卡页,而非全堆,大幅缩短 STW 时间

这相当于把“全局一致性问题”降级为“局部修补问题”,是 CMS 实现低停顿的关键技术底座。

重新标记不是重头再来,而是精准补漏

重新标记(Remark)虽是 STW 阶段,但它的任务不是从头遍历整个堆,而是聚焦三类易变区域:

October CMS
October CMS

October CMS 是基于 Laravel 生态的 PHP CMS,适合开发者快速构建可定制内容网站和业务后台。

下载
  • 初始标记后晋升到老年代的新生代对象(需扫描整个新生代)
  • 并发标记期间被用户线程修改过的老年代对象(即卡表中的脏卡)
  • 年轻代中仍存活、且持有对老年代对象引用的对象(防止老年代对象因“跨代引用”丢失)

因此日志中常见 [Rescan (parallel)],说明该阶段可启用多线程并行扫描——它本质是一次带范围限定的“快速复查”,而非全量重标。

清除阶段允许浮动垃圾,也接受碎片化

并发清除阶段,GC 线程一边清理未标记对象,用户线程一边分配新对象。这意味着:

  • 刚被清除的空间可能立刻被新对象占用,无需等待下一轮 GC
  • 但清除不整理内存,空闲空间呈离散小块,形成碎片
  • 部分在并发标记后才变成垃圾的对象(如标记后被断开引用),本次无法回收,称为“浮动垃圾”,留待下次处理

这种设计以空间碎片和少量浮动垃圾为代价,换来了清除阶段零停顿——正是 CMS “低延迟优先”哲学的直接体现。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

cms 垃圾回收器

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Maven零基础入门教程
Maven零基础入门教程

本合集由PHP中文网精心整理,提供Maven零基础入门到完整使用的保姆级教程。内容涵盖环境安装、核心配置、仓库管理及项目构建等核心知识点。通过详细步骤解析与代码示例,助你快速掌握Maven的依赖管理与自动化构建,轻松解决Java项目中的各种痛点,是新手入门与进阶的必备指南。

2026.08.05

2

18

Maven安装及配置教程
Maven安装及配置教程

本合集由PHP中文网精心整理,提供Maven安装配置与环境配置详情指南。内容涵盖Maven下载、解压安装、环境变量配置、阿里云镜像加速及本地仓库修改等全流程。教程通俗易懂,帮助开发者轻松解决依赖管理难题,快速掌握Maven核心构建技能,是Java开发者的必备实战指南。

2026.08.05

2

24

Selenium WebDriver元素定位与页面操作教程
Selenium WebDriver元素定位与页面操作教程

本专题整理Selenium WebDriver元素定位、XPath、CSS Selector、等待机制、窗口切换、Frame处理、Alert弹窗、Cookie操作和文件上传等核心用法。

2026.08.05

8

26

Selenium Grid分布式测试与并行执行教程
Selenium Grid分布式测试与并行执行教程

本专题整理Selenium Grid架构、远程WebDriver、并行测试、Docker部署、Kubernetes动态Grid、浏览器矩阵和测试环境扩展方法,适合进阶自动化测试团队使用。

2026.08.05

4

18

Selenium常见报错排查与自动化测试稳定性
Selenium常见报错排查与自动化测试稳定性

本专题整理Selenium常见报错、驱动版本问题、元素找不到、点击失败、等待超时、浏览器闪退、脚本不稳定和测试用例维护方法。

2026.08.05

0

17

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

31

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

10

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

5

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程