堆内存碎片化问题:不同垃圾回收算法的应对策略

夏雪大大_3377

夏雪大大_3377

2026-07-05

800人浏览

原创

堆内存碎片化本质是空闲空间不连续,导致大对象无法分配,进而引发频繁gc甚至oom;标记-清除类(如cms)不处理碎片、只留隐患;复制类(如serial、g1年轻代)天然无碎片但空间减半;标记-整理类(如g1混合回收、zgc、shenandoah)边回收边压缩,兼顾空间利用率与低碎片。

堆内存碎片化问题:不同垃圾回收算法的应对策略

堆内存碎片化本质是空闲空间不连续,导致大对象无法分配,进而引发频繁 GC 甚至 OOM。不同垃圾回收算法不是“能不能处理碎片”,而是“怎么处理”——有的回避、有的预防、有的主动整理。

标记-清除类:不处理碎片,只留隐患

这类算法(如 CMS)分两步:先标记存活对象,再清除未标记区域。它不做对象移动,所以停顿短,但会留下大量零散空闲块。

  • 典型表现:总空闲内存充足,却因找不到连续 4MB 空间而分配失败
  • 后果是被迫触发 Full GC,甚至在 JDK 9 后被官方弃用
  • 适合场景极少——仅限对延迟极度敏感、且堆不大、对象生命周期高度可控的老系统

复制类:天然无碎片,靠空间换连续性

Serial、Parallel Scavenge 和 G1 的年轻代都用复制算法。它把内存划成 Eden + Survivor 或多个 Region,GC 时只把存活对象复制到新区域,原区域整块清空。

‎ Gemini Storybook
‎ Gemini Storybook

一款AI图像与设计工具,主要用于Google Gemini推出的AI绘本生成工具,适合需要提升相关任务效率的用户。

下载
  • 每次回收后目标区始终紧凑,完全规避外部碎片
  • 代价是必须预留备用空间(比如 Eden:Survivor = 8:1),实际可用堆容量打折扣
  • 当对象存活率高时(如长生命周期缓存),复制开销陡增,效率明显下降

标记-整理类:边回收边压缩,兼顾空间与连续

G1 混合回收、Parallel Old、ZGC 和 Shenandoah 都属于这一类。它们不只是清理,还主动重排内存布局。

  • G1 在混合回收阶段挑选部分 Region,将其中存活对象复制到其他 Region,腾出整块干净空间
  • Parallel Old 直接将老年代存活对象向一端滑动压缩,合并空闲区
  • ZGC 和 Shenandoah 更进一步,在应用线程运行的同时并发完成对象移动和引用更新,实现低停顿+低碎片
  • 缺点是需额外处理指针重定向,带来一定 CPU 开销,但换来的是高空间利用率和稳定分配能力

选型关键看实际约束

没有“最好”的回收器,只有“最合适”的组合:

  • 延迟敏感、堆 ≤16GB、可接受少量 CPU 开销 → ZGC 或 Shenandoah
  • 吞吐优先、堆较大(32GB+)、能容忍 100ms 级停顿 → G1
  • 老旧系统、堆小(
  • 新项目直接排除 CMS,它不解决碎片,反而因碎片加剧 GC 压力

相关文章

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

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

下载

相关标签:

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

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5607

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2428

6

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

2023.08.14

5716

4

Python uv使用教程
Python uv使用教程

本专题汇总了 Python uv 使用教程与高效使用指南,从 uv 安装配置、常用命令到虚拟环境、依赖管理与项目打包,系统讲解如何用 uv 替代 pip 与 poetry,全面提升 Python 项目开发效率,助你快速上手这一现代化包管理工具,打造干净高效的 Python 工作流。

2026.10.15

0

15

剧云AI短剧创作教程合集
剧云AI短剧创作教程合集

本专题聚焦剧云AI短剧创作,讲解从短剧灵感、梗概、全局大纲到分集、分场和正文的完整流程及节奏设计方法。

2026.10.14

0

15

剧云AI剧本创作零基础入门
剧云AI剧本创作零基础入门

本专题系统讲解剧云AI剧本创作流程,涵盖灵感、梗概、大纲、分场与正文生成,帮助新手快速完成首个中文剧本项目。

2026.10.14

0

14

VibeKnow文档转视频操作指南
VibeKnow文档转视频操作指南

本专题讲解VibeKnow上传Word、TXT、Markdown等材料生成视频的方法,覆盖内容解析、脚本组织、画面生成与成片检查。

2026.10.14

0

15

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

2026.10.14

0

13

二狗PPT大纲编辑实操指南
二狗PPT大纲编辑实操指南

本专题聚焦二狗PPT结构化大纲的生成和修改,讲解标题、正文、目录、页数与页面顺序的调整方法,提升汇报逻辑和内容完整性。

2026.10.14

0

15

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习