CMS并发标记中的工作线程与GC线程协同

冷炫風刃

冷炫風刃

2026-07-27

609人浏览

原创

cms并发标记阶段的核心目标是让应用线程与gc线程尽可能同时运行以缩短停顿时间,通过初始标记、并发标记(三色标记+写屏障)、重新标记三步协同实现标记一致性,避免漏标和错标。

cms并发标记中的工作线程与gc线程协同

CMS 的并发标记阶段,核心目标就是让应用(用户)线程和 GC 线程尽可能同时运行,从而大幅缩短停顿时间。它不是“完全不干扰”,而是通过精巧的协作机制,在保证标记准确性前提下实现高并发。

为什么必须协同?不暂停会出问题

如果完全放任用户线程在标记过程中自由修改对象引用,就会出现两类风险:

  • 漏标:某个对象原本被引用着,但在并发标记途中被用户线程断开了引用,GC 没来得及标记它,结果被错误回收——这会导致程序崩溃。
  • 错标:某个对象本来已不可达(是垃圾),但用户线程在标记中途又给它加了新引用,而 GC 已经把它标为可回收,后续清理就会出错。

所以协同不是为了“不打扰”,而是为了在动态变化中守住标记一致性底线。

初始标记:轻量级握手,快速打点

这是整个流程中第一次 STW(Stop-The-World),但它只做一件事:找出所有 GC Roots 直接关联的对象(比如栈里的局部变量、静态字段等)。这个集合很小,耗时极短,且与堆大小无关,属于“快进快出”的协同起点。

并发标记:边跑边标,靠三色标记+写屏障兜底

GC 线程从初始标记的对象出发,遍历整个对象图并打标;与此同时,用户线程照常分配新对象、修改引用、执行业务逻辑。

October CMS
October CMS

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

下载

为应对引用变更,CMS 采用三色标记法(白-未访问、灰-已访问但子节点未处理、黑-已访问且子节点全处理完),并配合写屏障(Write Barrier)技术:

  • 当用户线程修改引用(如把 A.f = B)时,写屏障会拦截该操作;
  • 若 B 是白色(未标记)且 A 是黑色(已处理完),就将 B “推回”灰色队列,确保它不会被漏掉;
  • 这样即使用户线程在动,GC 线程也能逐步收敛到一个相对准确的可达集。

重新标记:补漏校准,短暂同步

并发标记结束后,用户线程可能又改了几处引用。重新标记阶段再次 STW,但只扫描那些“最可能变动”的区域:

  • 被写屏障记录的“脏卡”(Card Table 中标记过的内存页);
  • 新生代中刚晋升到老年代的对象;
  • 部分 GC Roots 的直接引用(如 JNI 全局引用、线程栈等)。

它不重扫全堆,只聚焦“高危区”,因此停顿远短于初始标记,但比初始标记长一些。

资源协同:CPU 分配要合理

CMS 默认开启的 GC 线程数是 (CPU 核心数 + 3) / 4(向下取整)。这意味着:

  • 8 核机器上,CMS 用约 2~3 个线程做并发标记;
  • 用户线程仍能占用大部分 CPU,响应不受明显影响;
  • 但若只有 2 核,CMS 就可能占掉近一半算力,导致应用吞吐下降明显——这时协同就变成“抢资源”,得权衡是否换 G1 或 ZGC。

不复杂但容易忽略

相关文章

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

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

下载

相关标签:

cms

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

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

2023.08.10

2118

6

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

4

26

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

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

2026.08.05

1

18

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

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

2026.08.05

0

17

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

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

2026.08.04

11

21

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

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

2026.08.04

8

20

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

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

2026.08.04

10

14

热门下载

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

精品课程

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