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

(JVM)四种垃圾回收算法

在 JVM 中,垃圾回收(GC)是核心机制之一。为了提升性能与内存利用率,JVM 采用了多种垃圾回收算法。本文总结了 四种常见的 GC 算法,并结合其优缺点与应用场景进行说明。


1. 标记-清除(Mark-Sweep)

工作流程

  1. 标记:从 GC Roots 出发,标记所有存活对象。

  2. 清除:回收未标记的对象,释放内存空间。

优点

  • 实现简单。

  • 不需要对象移动。

缺点

  • 会产生 内存碎片,导致大对象分配困难。

  • 标记和清理效率相对较低。

应用

  • 常用于 老年代(Old Generation) 的早期实现。


2. 标记-整理(Mark-Compact)

工作流程

  1. 标记:标记存活对象。

  2. 整理:将存活对象移动到一端,按顺序排列,清理边界外的内存。

优点

  • 消除了 内存碎片

  • 内存利用率更高。

缺点

  • 需要移动对象,成本较高(复制和更新引用)。

应用

  • 常用于 老年代
    👉 老年代对象存活率高、体积大,不能用复制算法(浪费内存),也不适合只用标记-清除(碎片多),因此更适合标记-整理。


3. 复制算法(Copying)

工作流程

  1. 将内存分为两块相等的区域(From、To)。

  2. 每次只使用一块区域(From)。

  3. GC 时,把存活对象复制到另一块区域(To),然后清空 From。

优点

  • 无内存碎片。

  • 内存分配只需移动指针,效率高。

缺点

  • 内存利用率低(只能使用一半空间)。

  • 复制存活对象需要开销。

应用

  • 常用于 新生代(Young Generation)
    👉 新生代对象生命周期短,大部分很快被回收,存活率低,复制的开销不大。


4. 分代收集(Generational Collection)

核心思想

不同对象的生命周期不同,采用不同的回收算法:

  • 新生代:存活率低 → 使用 复制算法,效率高。

  • 老年代:存活率高、对象大 → 使用 标记-清除标记-整理

优点

  • 综合利用不同算法的优势。

  • 性能和内存利用率较高。

缺点

  • 实现复杂。

应用

  • HotSpot JVM 主流实现就是基于分代收集思想的(新生代 + 老年代)。


总结对比表

算法原理优点缺点应用场景
标记-清除标记存活对象,清理未标记对象实现简单有碎片,效率低老年代(早期)
标记-整理标记存活对象并移动整理无碎片对象移动,成本高老年代
复制算法复制存活对象到另一块区域快,无碎片浪费内存(50%利用率)新生代
分代收集新生代复制 + 老年代标记整理综合性能好实现复杂主流 JVM 使用

总结

  • 新生代:对象生命周期短 → 复制算法

  • 老年代:对象大、存活率高 → 标记-整理

  • 分代收集:融合多种算法,实际生产环境的主流方案。

http://www.dtcms.com/a/366740.html

相关文章:

  • ArcGIS学习-15 实战-建设用地适宜性评价
  • Node.js轻松生成动态二维码
  • Windows+Docker一键部署CozeStudio私有化,保姆级
  • 【Docker】P1 前言:容器化技术发展之路
  • LangChain4J-(4)-多模态视觉理解
  • 少儿编程C++快速教程之——2. 字符串处理
  • SMARTGRAPHQA —— 基于多模态大模型的PDF 转 Markdown方法和基于大模型格式校正方法
  • Unity之安装教学
  • GcWord V8.2 新版本:TOA/TA字段增强、模板标签管理与PDF导出优化
  • 无需任何软件禁用 10 年 windows 更新
  • ArcGIS答疑-如何消除两张栅格图片中间的黑缝
  • 《D (R,O) Grasp:跨机械手灵巧抓取的机器人 - 物体交互统一表示》论文解读
  • 零售消费企业的数字化增长实践,2025新版下载
  • 三目摄像头 是一种配备三个独立摄像头模块的视觉系统
  • 苍穹外卖Day9 | 用户端、管理端接口功能开发、百度地图解析配送范围
  • 算法之二叉树
  • 不用服务器也能监控网络:MyIP+cpolar让中小企业告别昂贵方案
  • Wisdom SSH 是一款集成了强大 AI 助手功能的 SSH 工具,助你高效管理服务器。
  • 以OWTB为核心的三方仓运配一体化平台架构设计文档V0.1
  • 【软件测试】第1章 认识测试
  • Qt实现2048小游戏:看看AI如何评估棋盘策略实现“人机合一
  • OPENCV复习第二期
  • .NET GcPDF V8.2 新版本:人工智能 PDF 处理
  • Lucene 8.7.0 版本的索引文件格式
  • 学习资料1(粗略版)
  • android View详解—自定义ViewGroup,流式布局
  • Android 项目:画图白板APP开发(三)——笔锋(多 Path 叠加)
  • MySQL主从复制之进阶延时同步、GTID复制、半同步复制完整实验流程
  • Html重绘和重排
  • 25高教社杯数模国赛【C题国一学长思路+问题分析】