news 2026/5/1 8:33:43

JVM垃圾回收算法?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JVM垃圾回收算法?

JVM 垃圾回收(GC)算法的核心目标是精准识别堆中无用对象并回收其内存,同时兼顾回收效率、内存利用率和停顿时间。算法的演变围绕「标记 - 清理 - 整理」的核心思路展开,分为4 种基础算法1 种组合策略(分代收集)1 种进阶分区算法,不同算法适配不同的内存分代 / 场景,以下是详细拆解:

一、基础垃圾回收算法(4 种核心)

这是 GC 的底层基础逻辑,所有复杂收集器均基于这些算法组合 / 优化。

算法类型核心步骤核心优点核心缺点适用区域 / 典型收集器
标记 - 清除(Mark-Sweep)1. 标记:通过可达性分析标记所有存活对象;2. 清除:遍历堆,回收未标记的垃圾对象实现简单、不移动对象1. 内存碎片严重;2. 效率低(遍历全堆)老年代 / CMS 收集器
复制算法(Copying)1. 划分:将内存分为 2 块(新生代优化为 Eden:S0:S1=8:1:1);2. 复制:用满后标记存活对象,复制到空闲区域;3. 清空:销毁原区域所有内存1. 无内存碎片;2. 效率高(仅处理存活对象)内存利用率低(原始 1:1,优化后 90% 可用)新生代 / SerialGC、ParallelGC
标记 - 整理(Mark-Compact)1. 标记:同标记 - 清除;2. 整理:将所有存活对象移动到内存一端(地址连续);3. 清除:回收边界外的所有内存1. 无内存碎片;2. 内存利用率 100%效率低(移动对象 + 更新引用)老年代 / G1(老年代)、Serial Old
标记 - 删除(Mark-Delete)(非主流,仅嵌入式 JVM 使用)标记后直接删除垃圾对象,不整理实现极简碎片极严重、仅适配小内存极小内存场景 / 嵌入式 JVM
关键补充(基础算法):
  1. 标记 - 清除:是最早期算法,CMS 收集器为优化其效率,将 “清除” 拆分为 “初始标记→并发标记→重新标记→并发清除”,减少 STW(停止世界)时间;
  2. 复制算法:新生代的核心优化(8:1:1)是因为 “对象朝生夕死”,Eden 区满时仅需复制少量存活对象到 Survivor 区,利用率从 50% 提升到 90%;
  3. 标记 - 整理:是老年代的 “终极选择”,虽效率低,但能避免碎片导致的频繁 Full GC。

二、组合策略:分代收集算法(Generational Collection)

这不是独立算法,而是基于「分代假说」的组合策略,是 JVM 默认的 GC 核心逻辑。

1. 分代假说(核心依据)
  • 假说 1:绝大多数对象 “朝生夕死”(新生代对象存活时间极短,回收频率高);
  • 假说 2:存活对象会逐渐晋升到老年代(老年代对象存活时间长,回收频率低)。
2. 核心实现
  • 新生代:用「复制算法」(存活对象少,复制成本低,无碎片);
    • 触发 Minor GC:Eden 区满时,复制存活对象到 S0 区;下次 Minor GC 复制到 S1 区,多次存活后晋升老年代;
  • 老年代:用「标记 - 清除」或「标记 - 整理」(存活对象多,复制成本高,优先避免移动对象);
    • 触发 Major GC/Full GC:老年代空间不足时,回收老年代(Full GC 会同时回收新生代 + 老年代)。
3. 优势

兼顾 GC 效率和内存利用率:新生代用复制保证快回收,老年代用标记 - 清除 / 整理避免内存浪费。

三、进阶算法:分区收集算法(Region-Based)

为解决 “大内存场景(堆> 4G)下 STW 时间过长” 的问题,衍生出的分区策略,代表是 G1、ZGC、Shenandoah。

1. 核心思路
  • 将整个堆划分为多个大小相等的独立 Region(默认 1~32MB);
  • 每个 Region 可动态标记为 Eden、Survivor、Old 类型(打破传统 “新生代 / 老年代物理隔离”);
  • 优先回收「垃圾占比最高的 Region」(Garbage-First,G1 名称由来),减少单次 GC 的停顿时间。
2. 实现逻辑(以 G1 为例)
  1. 标记:遍历所有 Region,标记存活对象;
  2. 筛选:计算每个 Region 的垃圾占比,排序出 “收益最高” 的 Region(回收后释放内存最多);
  3. 回收:对选中的 Region,用「复制算法」将存活对象复制到空闲 Region,清空原 Region;
  4. 整理:老年代 Region 回收后自动整理,避免碎片。
3. 核心优势
  • 可控停顿:可设置最大 STW 时间(如-XX:MaxGCPauseMillis=200),JVM 自动调整回收的 Region 数量;
  • 适配大内存:堆内存从几 G 到上百 G 均可高效回收(ZGC/Shenandoah 甚至支持 TB 级堆);
  • 全堆统一管理:打破新生代 / 老年代的物理隔离,回收更灵活。

四、核心总结

  1. 算法演变逻辑:标记 - 清除(碎片多)→ 复制(无碎片但浪费)→ 标记 - 整理(无碎片不浪费)→ 分代(组合适配)→ 分区(大内存优化)
  2. 核心适配原则:
    • 新生代(对象存活率低)→ 复制算法;
    • 老年代(对象存活率高)→ 标记 - 清除 / 标记 - 整理;
    • 大内存场景→ 分区算法(G1/ZGC);
  3. 实际收集器的算法组合:
    • SerialGC:新生代复制 + 老年代标记 - 整理;
    • CMS:老年代标记 - 清除(并发);
    • G1:全堆分区 + 新生代复制 + 老年代标记 - 整理。

如果需要,可补充「各 GC 算法对应的 JVM 参数配置」或「算法性能对比(吞吐量 / 停顿时间)」,方便实战调优。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:33:02

如何快速搭建多平台音乐解析系统:终极完整指南

如何快速搭建多平台音乐解析系统:终极完整指南 【免费下载链接】music-api 各大音乐平台的歌曲播放地址获取接口,包含网易云音乐,qq音乐,酷狗音乐等平台 项目地址: https://gitcode.com/gh_mirrors/mu/music-api 在数字化音…

作者头像 李华
网站建设 2026/4/27 15:39:46

腾讯SRPO技术突破:10分钟训练让AI生图真实感提升3倍

腾讯SRPO技术突破:10分钟训练让AI生图真实感提升3倍 【免费下载链接】SRPO 腾讯SRPO是基于FLUX.1.dev优化的文本生成图像模型,采用Direct-Align技术提升降噪效率,通过语义相对偏好优化实现奖励在线调整。无需依赖离线奖励微调,即可…

作者头像 李华
网站建设 2026/5/1 8:30:48

QQ空间数据完整备份神器:一键导出所有历史记录

你是否担心那些珍贵的QQ空间记忆会随时间流逝而消失?那些年发过的说说、收到的留言、转发的精彩内容,都是青春的见证。现在,通过GetQzonehistory工具,你可以轻松实现QQ空间数据的完整备份,将所有回忆永久保存。&#x…

作者头像 李华
网站建设 2026/5/1 5:02:40

Wan2.2-T2V-A14B如何实现水面波纹的精细动态渲染?

Wan2.2-T2V-A14B如何实现水面波纹的精细动态渲染? 在影视级视觉内容生成领域,一个看似简单的场景——微风吹拂下的湖面泛起涟漪——却对AI模型提出了极高的挑战。这不仅是纹理的变化,更涉及流体动力学、光照交互、时序连续性与高频细节还原等…

作者头像 李华
网站建设 2026/5/1 7:35:34

Wan2.2-T2V-A14B支持批量生成吗?企业级任务调度方案

Wan2.2-T2V-A14B支持批量生成吗?企业级任务调度方案 在数字内容爆炸式增长的今天,广告、影视、社交媒体等领域对视频素材的需求早已不再是“有没有”的问题,而是“多快好省”能否兼得。传统视频制作流程依赖人力密集型创作,周期长…

作者头像 李华
网站建设 2026/5/1 4:13:03

四个迹象表明是时候离开你的数据科学工作了

原文:towardsdatascience.com/four-signs-its-time-to-leave-your-data-science-job-7b56818a95d2 我经常看到这种情况:人们在一个地方待的时间远远超过了必要的。待在同一个地方可能会使一个人的技能和薪酬停滞不前,这绝对不是理想的情况。 …

作者头像 李华