当前位置: 首页 > article >正文

深入解密 JVM:CMS 垃圾回收器的“并发标记”到底是不是多此一举?

深入解密 JVMCMS 垃圾回收器的“并发标记”到底是不是多此一举在学习 JVM 垃圾回收机制时很多开发者在看到 CMS (Concurrent Mark Sweep) 垃圾回收器的执行步骤图时都会产生一个直击灵魂的疑问“初始标记和重新标记不是已经把所有的存活对象都标记过了吗为什么中间还要夹一个耗时极长的‘并发标记’这到底有什么用”这是一个非常牛的观察很多初学者都会被这几个名字给“骗”了。你之所以会产生这个巨大的逻辑冲突是因为你严重高估了“初始标记Initial Mark”的工作量直接给你纠正这个极其关键的底层误区初始标记根本就没有把所有的存活对象标记出来它仅仅只标记了冰山一角。为了让你彻底看清这三个阶段到底在干嘛我们把整个标记存活对象的过程拆解为“1%、98%、1%”的工作量分配比例来看。一、 初始标记Initial Mark只干 1% 的活必须 STW真相揭秘在这个阶段GC 线程绝对不会顺藤摸瓜去遍历整个堆内存里的所有对象。它只做极其简单的一件事仅仅标记那些和 GC Roots 直接相连的“第一层对象”。为什么这么快因为程序中作为 GC Roots 的对象比如线程栈里的局部变量、静态变量以及它们的直系子对象数量是极少的。所以虽然这个阶段需要“暂停所有用户线程Stop The World, STW”但由于工作量极小暂停时间极其短暂你几乎感觉不到系统的卡顿。二、 并发标记Concurrent Mark干 98% 的脏活累活核心作用这才是真正干大活的阶段也是图示中最核心的一步。GC 线程会从刚才“初始标记”找出的第一层对象开始顺藤摸瓜一层一层地深度遍历整个极其庞大的对象关系引用图可能有几十万、几百万个对象。为什么必须“并发”因为遍历所有的存活对象实在太耗时了如果这个时候让系统停下来STW去慢慢找你的 Java 程序可能会直接卡顿好几秒甚至几十秒这对于 Web 应用来说是灾难性的。为了不让你觉得卡CMS 做出了最大的让步让 GC 线程和你的业务用户线程同时运行并发。三、 重新标记Remark查漏补缺的最后 1%必须 STW真相揭秘既然第二步是“并发”干活的这就意味着一个极其残酷的现实在 GC 线程到处做标记的时候你的业务线程还在疯狂地 new 新对象或者修改老对象的引用关系核心作用经过漫长的第二步GC 线程终于把对象图遍历完了。但因为业务线程在捣乱导致第二步的结果不一定 100% 准确会产生著名的“漏标”或“错标”问题。所以CMS 必须最后再咬牙暂停一次用户线程STW花极短的时间把第二步期间发生“引用变动”的那一小撮对象重新核对并修正一遍。 终极通俗大比喻警察抓黑帮网络如果上面的技术原理解释还不够直观我们来想象一个“抓出整个黑帮网络找存活对象”的场景初始标记封锁全城 1 秒钟警察突然行动直接冲进几个老大的家里把老大GC Roots 的直系小弟按住。因为目标明确耗时极短。并发标记全城恢复正常生活警察便衣暗访警察根据老大的手机通讯录顺藤摸瓜去查下面的堂主、小弟、马仔遍历整个对象图。这个过程可能要查好几个月为了不引发经济瘫痪绝对不能封锁城市必须让市民继续正常生活业务线程并发运行。重新标记再次封锁全城 1 分钟因为查了几个月这期间肯定有小弟新认了大哥或者有人退出了黑帮。为了防止抓错人或漏抓人警察必须再短暂停顿一下城市把这几个月内发生的“人事变动”对齐一下账本做最后的收网确认。总结现在你明白了如果没有图中的并发标记CMS 根本找不到那剩下 98% 藏在深处的存活对象。正因为顺藤摸瓜找对象极其耗时CMS 为了降低停顿时间Low Pause才让业务线程一起跑也正因为允许业务线程一起跑才不可避免地引出了后面那一步用于“擦屁股”和“对账”的重新标记。允许业务线程一起跑才不可避免地引出了后面那一步用于“擦屁股”和“对账”的重新标记。这就是 CMS 垃圾回收器在“吞吐量”与“低延迟”之间做出的最精妙的博弈

相关文章:

深入解密 JVM:CMS 垃圾回收器的“并发标记”到底是不是多此一举?

深入解密 JVM:CMS 垃圾回收器的“并发标记”到底是不是多此一举? 在学习 JVM 垃圾回收机制时,很多开发者在看到 CMS (Concurrent Mark Sweep) 垃圾回收器的执行步骤图时,都会产生一个直击灵魂的疑问:“初始标记和重新标…...

突破显卡性能瓶颈:NVIDIA Profile Inspector高级配置与性能优化指南

突破显卡性能瓶颈:NVIDIA Profile Inspector高级配置与性能优化指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 当你在4K分辨率下运行3A大作时,是否遇到过画面撕裂与输入延迟…...

REFramework:游戏启动崩溃问题的系统化解决方案

REFramework:游戏启动崩溃问题的系统化解决方案 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework 问题诊断:当游戏启动遇到…...

2025界面字体设计效率提升指南:Bebas Neue开源字体全解析

2025界面字体设计效率提升指南:Bebas Neue开源字体全解析 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 在数字界面设计领域,字体选型直接影响用户体验与开发效率。作为2025年最受瞩目的…...

微信聊天记录永久保存的3种方法:WeChatMsg完整指南与实战技巧

微信聊天记录永久保存的3种方法:WeChatMsg完整指南与实战技巧 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/w…...

破解网盘限速迷宫:技术侦探带你掌握高效直链解析方案

破解网盘限速迷宫:技术侦探带你掌握高效直链解析方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

番茄小说下载器完整指南:3种方法永久保存你喜爱的小说

番茄小说下载器完整指南:3种方法永久保存你喜爱的小说 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 番茄小说下载器是一个功能强大的开源工具,专门用于批量下载和…...

OpenClaw自动化测试:Qwen3.5-9B在CI/CD中的实践应用

OpenClaw自动化测试:Qwen3.5-9B在CI/CD中的实践应用 1. 为什么选择OpenClawQwen3.5-9B做测试自动化 去年参与一个前后端分离项目时,我遇到了测试覆盖率不足的老问题。传统方案要么需要人工编写大量测试用例,要么依赖规则引擎生成死板的测试…...

FireRedASR-AED-L语音识别模型WebUI部署教程:Python环境快速配置指南

FireRedASR-AED-L语音识别模型WebUI部署教程:Python环境快速配置指南 想试试最新的语音识别模型,但被复杂的Python环境配置和依赖包冲突劝退?这感觉我太懂了。每次看到新模型发布,兴致勃勃地准备上手,结果第一步环境搭…...

百川2-13B-4bits+OpenClaw:科研实验记录自动化整理方案

百川2-13B-4bitsOpenClaw:科研实验记录自动化整理方案 1. 科研工作者的痛点与自动化契机 作为一名长期泡在实验室的研究员,我深知实验记录整理的痛苦。每天面对LabArchives里杂乱无章的实验数据、仪器导出的CSV文件和各种手写笔记,光是整理…...

OpenClaw+Qwen3-14B组合优化:长文本处理的内存占用实测

OpenClawQwen3-14B组合优化:长文本处理的内存占用实测 1. 为什么需要关注长文本处理的显存占用? 上周我在整理一批技术文档时遇到了一个典型问题:用OpenClaw调用Qwen3-14B处理200页的PDF文件时,系统突然崩溃。查看日志才发现是显…...

MPC3424高精度Δ-Σ ADC嵌入式驱动设计与工业实践

1. MPC3424高精度Δ-Σ模数转换器驱动库深度解析与工程实践1.1 芯片特性与工程定位MPC3424是Microchip公司推出的4通道、18位分辨率、IC接口的Δ-Σ型模数转换器(ADC),专为高精度工业测量、传感器信号调理和数据采集系统设计。其核心优势在于…...

ISPS编程语言HLS设计

一、ISPS编程语言HLS设计 1.ISPS 并非现代主流编程语言 2.ISPS‌ 全称为 ‌Instruction Set Processor Specifications‌(指令集处理器规范),是一种用于描述数字系统结构和行为的‌早期硬件描述语言‌ ‌ 3.ISPS 属于‌第二代硬件描述语言‌&…...

Nginx反向代理:一站式解决MinIO跨域访问难题

1. 为什么需要Nginx反向代理解决MinIO跨域问题 第一次用MinIO做文件存储服务时,我在前端调用接口遇到了经典的跨域报错。浏览器控制台那个鲜红的CORS错误提示,相信很多开发者都见过。当时我的第一反应是去修改MinIO服务端的CORS配置,但后来发…...

告别繁琐研究!DeerFlow快速入门:开箱即用的个人深度研究助理

告别繁琐研究!DeerFlow快速入门:开箱即用的个人深度研究助理 1. 认识DeerFlow:您的智能研究助手 DeerFlow是一款基于LangStack技术框架开发的深度研究工具,它整合了语言模型、网络搜索和代码执行能力,为您提供全方位…...

如何快速配置PlugY:暗黑破坏神2单机玩家的终极生存指南

如何快速配置PlugY:暗黑破坏神2单机玩家的终极生存指南 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 你是否曾在暗黑破坏神2的单机游戏中为有限的仓库空…...

AICoverGen技术指南:从环境部署到专业AI翻唱制作

AICoverGen技术指南:从环境部署到专业AI翻唱制作 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 问题篇&…...

【CVPR26-杜克大学】超越真值约束:利用图像质量先验实现真实场景图像修复

Beyond Ground-Truth: Leveraging Image Quality Priors for Real-World Image Restoration代码:https://github.com/fengyang1399-pixel/IQPIR单位:杜克大学、清华大学、洛桑联邦理工学院一、问题背景现在的真实场景图像修复(模糊人脸、暗光…...

ElegantBook LaTeX模板技术解析:中文书籍排版系统架构与实战应用

ElegantBook LaTeX模板技术解析:中文书籍排版系统架构与实战应用 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook ElegantBook作为LaTeX中文书籍排版的专业解决方案,通…...

OpenClaw+千问3.5-27B开发提效:日志分析+异常自动上报

OpenClaw千问3.5-27B开发提效:日志分析异常自动上报 1. 为什么需要自动化日志分析 作为一个长期与代码打交道的开发者,我每天至少有30%的时间花在查看日志、定位问题上。特别是在调试分布式系统时,不同服务的日志分散在各个文件&#xff0c…...

复分析与复变函数的区别

1、本质相同,称呼习惯不同 ‌复分析与复变函数本质上指代同一数学分支,无实质区别‌,通常可互换使用 。二者主要差异体现在‌课程定位‌与‌研究侧重‌上:‌‌ 2、‌名称沿革‌:复变函数论是传统称呼,复分析…...

Testsigma企业级自动化测试平台架构设计与高可用部署指南

Testsigma企业级自动化测试平台架构设计与高可用部署指南 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve quality across web, m…...

恒模约束波形设计(Constant Modulus Waveform Design)第2章 MIMO雷达波形设计基础

目录 2.1 MIMO雷达系统模型 2.1.1 发射-接收信号模型与阵列几何配置 2.1.2 信号依赖干扰建模 2.1.3 扩展目标与点目标检测模型 2.2 波形设计目标函数 2.2.1 波束赋形设计准则 2.2.2 输出SINR最大化框架 2.2.3 CRLB最小化方法 2.3 硬件约束与工程实现 2.3.1 高功率放大…...

3分钟搞定30+文库下载:这款开源神器如何帮你突破平台限制?

3分钟搞定30文库下载:这款开源神器如何帮你突破平台限制? 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该…...

openclaw部署oauth模式codex无法正常登录

windows: openclaw onboard --auth-choice openai-codex 执行后,codex浏览器可以登录,但是终端中返回403 这里报错可以看到是region不符合,可以看下vpn中是否开启了tun模式,开启后可以测试一下地区 curl.exe https:/…...

适合嵌入式新手实战的五个项目!

嵌入式开发需结合硬件操作与软件逻辑,初学阶段通过实战项目积累经验至关重要。本文精选5个难度递进的小项目,覆盖基础外设控制到简单智能系统搭建,帮助快速掌握核心技能。一、基础控制类1. LED流水灯核心目标:掌握GPIO输出控制与延…...

Camunda 业务规则任务 (Business Rule Task) 与 DMN 深度解析

Camunda 业务规则任务 (Business Rule Task) 与 DMN 深度解析一、 核心概念定义 1. Business Rule Task(业务规则任务) 角色定位:BPMN 流程中的“决策代理人”。它不执行具体的业务动作(如发送邮件),而是负…...

Leather Dress Collection赋能服装创业:低成本生成高质感皮革服饰概念图

Leather Dress Collection赋能服装创业:低成本生成高质感皮革服饰概念图 你是不是也有过这样的困扰?脑子里有一个绝佳的皮革服装设计灵感,却苦于找不到合适的画师,或者高昂的设计费让你望而却步。对于服装创业者、独立设计师&…...

终极指南:如何用Obsidian PDF++插件将PDF阅读效率提升300%

终极指南:如何用Obsidian PDF插件将PDF阅读效率提升300% 【免费下载链接】obsidian-pdf-plus PDF: the most Obsidian-native PDF annotation & viewing tool ever. Comes with optional Vim keybindings. 项目地址: https://gitcode.com/gh_mirrors/ob/obsid…...

一个简单到尴尬却有效的SFT实验

卷友们好,我是rumor。上周Apple有篇论文做了一个简单到有点尴尬的实验:从模型自己采样一批代码答案,不过滤对错,不执行验证,直接拿去SFT。结果Qwen3-30B在LiveCodeBench v6上,pass1从42.4%涨到55.3%&#x…...