JVM 标记 - 清除Mark-Sweep、标记 - 整理Mark-Compact这两个都是垃圾回收算法作用识别堆中死亡对象回收内存区别在回收后怎么处理存活对象。补充还有复制算法一般新生代用复制老年代常用标记清除 / 标记整理。一、标记 - 清除 Mark-Sweep两个阶段标记阶段 → 清除阶段标记从 GC Roots 出发遍历把所有存活对象打上标记。清除扫描整个堆没有标记的对象就是垃圾直接回收存活对象原地不动。示意图简述[存活][垃圾][存活][垃圾][存活] 标记后 [存活√][垃圾×][存活√][垃圾×][存活√] 清除后 [存活√][空闲][存活√][空闲][存活√]✅优点不需要移动对象开销小不会损失内存适合大量存活对象的场景老年代。❌缺点内存碎片回收后空闲内存是零散的。当要分配大对象时找不到连续空间提前触发 GC。两次扫描堆标记扫一次清除再扫一次堆越大耗时越长。应用CMS 收集器Concurrent Mark Sweep就是标记清除。二、标记 - 整理 Mark-Compact标记阶段和标记清除完全一样区别在回收之后标记GC Roots 遍历标记存活对象。整理压缩不是直接清垃圾。把所有存活对象向堆的一端移动、紧凑排列全部挤在一起然后一次性清理掉边界以外的全部垃圾。[存活][垃圾][存活][垃圾][存活] 标记后 [存活√][垃圾×][存活√][垃圾×][存活√] 整理压缩后 [存活√][存活√][存活√][空闲空闲空闲]✅优点无内存碎片空闲内存是一整块连续空间分配大对象很友好内存分配简单用指针碰撞Bump The Pointer即可。❌缺点需要移动对象移动对象还要更新所有引用地址STWStop-The-World时间更长开销大。移动对象是全堆操作堆越大整理越慢。应用G1 的部分场景、Serial Old、Parallel Old 老年代收集器是标记整理。三、核心对比表算法步骤是否移动对象内存碎片STW适用场景标记 - 清除标记 → 清除❌不移动产生大量碎片相对短老年代存活对象多追求低 STWCMS标记 - 整理标记 → 移动压缩 → 清理✅移动存活对象无碎片较长老年代希望避免碎片四、面试高频问题1. CMS 为什么不用标记整理CMS 主打并发低停顿移动对象必须暂停所有用户线程STW代价极高所以 CMS 选用标记清除牺牲碎片换低 STW碎片问题到阈值触发 Full GC。2. 标记整理移动对象引用怎么处理移动完存活对象后更新所有指向这些对象的引用地址让引用指向新位置。这个过程是 STW 里完成。3. 复制算法和标记整理区别复制把存活对象复制到另一块空白内存原区域全部清空需要两块内存浪费一半空间适合新生代存活对象少。标记整理在同一块内存原地压缩不需要额外内存。五、CMS / G1 / ZGC收集器总览新生代复制算法为主老年代标记清除 / 标记整理收集器不是单一算法很多是组合算法新生代一套老年代一套。1. Serial串行收集器新生代复制算法老年代Serial OldSerial 收集器的老年代版本标记 - 整理特点单线程收集全程 STW收集时用户线程全部暂停。使用场景客户端、内存很小的程序。面试点最古老收集器单线程STW 长。2. Parallel并行收集器Parallel Scavenge Parallel Old新生代 Parallel Scavenge复制算法老年代 Parallel Old标记 - 整理特点多线程 GC用户线程暂停目标是可控吞吐量吞吐量 运行代码时间 / 总时间关注点优先保证吞吐量而不是单次停顿时间。面试吞吐量优先收集器适合后台计算型任务。3. CMSConcurrent Mark Sweep并发标记清除新生代复制算法老年代标记 - 清除算法目标低停顿尽量和用户线程并发执行。CMS 四个阶段初始标记STW只标记 GC Roots 直接引用对象很快并发标记和用户线程一起遍历整个对象图耗时最长无 STW重新标记STW修正并发标记期间用户线程修改产生的漏标对象并发清除和用户线程并发清理垃圾不移动对象CMS 缺点标记清除 →内存碎片碎片多了会触发 Full GC此时会用 Serial Old 做标记整理压缩并发阶段占用 CPU多核机器才划算浮动垃圾并发清理时新产生的垃圾本次 GC 无法回收只能留到下一次不能等到老年代满了再 GC要预留内存给并发阶段使用重点CMS不压缩对象所以才会碎片如果要压缩就必须移动对象移动对象无法并发必须 STW。4. G1Garbage-FirstJDK9 默认收集器区域化Region不再严格区分新生代老年代逻辑上仍有年轻区、老年代区。整体思想标记整理局部Region 之间使用复制算法算法本质全局标记整理不会产生内存碎片Region 内部回收存活对象时复制到空闲 Region工作流程初始标记STW并发标记最终标记STW筛选回收STW挑选垃圾最多的 Region 优先回收Garbage-First 名字来源特点可预测停顿模型用户可指定期望最大停顿时间。和 CMS 区别CMS 是整个老年代一起 GCG1 只选垃圾最多的 Region增量回收。G1 回收后存活对象复制到别的 Region天然整理无碎片。5. ZGCZ Garbage CollectorJDK11算法标记 - 整理核心目标超低 STWSTW 时间几乎和堆大小无关TB 级堆也可以做到毫秒级停顿核心技术读屏障 染色指针Colored PointerZGC 几乎所有阶段都并发标记、转移移动对象、重定位只有短暂 STW。 移动对象的时候引用还没来得及更新靠染色指针记录对象新地址访问时读屏障做转发。特点无内存碎片支持超大堆低延迟。6. ShenandoahJDK12算法标记整理和 ZGC 思路接近并发压缩读屏障低延迟区别Shenandoah 使用转发指针ZGC 使用染色指针。汇总表收集器新生代算法老年代算法特点Serial Serial Old复制标记 - 整理单线程STW 长Parallel Scavenge Parallel Old复制标记 - 整理多线程吞吐量优先CMS复制标记 - 清除并发低停顿有碎片G1局部复制全局标记整理标记整理Region 分区可预测停顿无碎片ZGC标记整理标记整理并发移动对象毫秒级 STWShenandoah标记整理标记整理并发压缩转发指针面试高频连环题Q1CMS 为什么不用标记整理标记整理需要移动对象移动对象必须更新所有引用这个过程没法并发会产生很长 STW。CMS 的设计目标就是低停顿所以选择标记清除牺牲碎片。碎片严重时会退化到 Serial Old 做 Full GC 压缩。Q2G1 是标记整理吗为什么又说用到复制算法G1全局是标记整理保证没有碎片回收单个 Region 的时候把存活对象复制到别的空闲 Region这个局部动作就是复制。本质是通过复制来完成整理。Q3ZGC 标记整理移动对象为什么几乎没有 STWZGC 是并发转移。移动对象这个动作不需要暂停用户线程。依靠染色指针 读屏障对象被移走之后旧指针不会立刻修改用户线程访问旧对象时触发读屏障自动转发到新地址。只有非常短暂的 STW。Q4CMS 和 G1 的核心差异CMS整个老年代统一扫描回收G1拆成 Region优先回收垃圾最多区域CMS标记清除产生碎片G1标记整理无碎片CMS只能调并发阈值G1 支持设置期望最大停顿时间可预测Q5G1 和 ZGC 的区别G1 的筛选回收阶段是 STW停顿时间随堆变大缓慢上涨ZGC 对象转移并发STW 固定很小堆多大影响不大适合 TB 级大堆超低延迟场景。
企业数字化 ERP 产品动态
相关推荐
销售线索私域运营路径设计:从分组标签到转化跟进 企业获客软件挖出的线索,导入私域之后需要一套完整的分组和触达机制。为什么销售线索加上微信就断了后续?这背后其实是销售线索挖掘之后的运营环节没跟上。最常见的情况是,线索加上好友之后没有做任何分类管理,朋友圈发的内容跟每… · 2026/9/24 17:43:12
2026年9月23日---周报 姓名:任晓莉班级;软件2班 实训周次:第3周实训时间:2026年9月23日 —2027年12月____日 实训项目:线上美妆商城建设运营一、本周实训目标完成商城商品优化、活动配置、内容运营开展引流推广实训,提升店铺访问… · 2026/9/24 17:43:12
JEV模型横空出世VS传统大模型 NandhaKishorM/laya(类似的开源本地模型) 区别于传统LLM模型,JEV是System One 决策模型,定位是做快速判断,不生成自由文本 1. 底层推理方式(最本质差异) 传统 LLM(GPT/Claude 等&… · 2026/9/24 17:43:06
基于YOLOv8的危险区域闯入识别:从部署到轨迹分析 简介:这份资源面向计算机、人工智能、自动化等专业的在校学生与教师,以及需要完成毕设、课程设计或大作业的学习者,提供一套基于YOLOv8的智慧工厂危险区域闯入识别完整方案。项目围绕目标检测与计算机视觉展开,可直接用于工业安全… · 2026/9/24 18:16:27
基于YOLOv8的智慧工厂危险区域闯入识别系统:从训练到部署 简介:这份资源面向计算机、人工智能、自动化等专业的在校学生与教师,提供一套可直接运行的智慧工厂危险区域闯入识别方案,适合作为毕业设计、课程设计或大作业的完整参考。项目以YOLOv8目标检测为核心,配套可视化界面,… · 2026/9/24 18:16:27
代码管理软件国产化替代实战:从Git迁移到权限重建的完整指南 我先把话说在前面:如果你的团队现在还在用GitLab、GitHub Enterprise这类国外代码托管系统,而且公司有信创改造或者国产化验收的要求,那这篇文章就是给你写的。我不绕弯子,直接讲代码管理软件国产化替代这件事到底怎么做ÿ… · 2026/9/24 18:16:27
OpenCV眼底病灶检测:从图像预处理到临床可用的完整实践 简介:本资源是一套基于Python与OpenCV实现的视网膜图像眼底病灶检测完整项目,面向计算机、人工智能、生物医学工程等专业的本科生及研究生,适用于毕业设计、课程设计与医学图像分析入门实践。项目覆盖微动脉瘤、出血点、硬性/软性渗出物及血管… · 2026/9/24 18:16:27
AI文本可视化工具实测:从杂乱文本到结构化思维导图与流程图 先交代一下背景,我最近在折腾各种 AI 效率工具,其实不是刻意去追新,而是手头确实碰到一个痛点:平时写技术方案、整理会议纪要、梳理需求逻辑,经常要对着好几千字的文本发愁,纯文字读起来太费劲,… · 2026/9/24 18:16:27
从零手写UserCF与ItemCF:协同过滤推荐算法实战与避坑指南 简介:这份资源用Python实现了基于物品与基于用户两种协同过滤推荐算法,面向推荐系统入门者、进阶学习者以及需要完成课程设计、大作业或毕设项目的同学,帮助理解协同过滤的核心思路与代码落地方式。压缩包共4个文件,包含2个py脚本… · 2026/9/24 18:16:21
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44