欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > JVM之经典垃圾回收器

JVM之经典垃圾回收器

2025/8/21 23:12:25 来源:https://blog.csdn.net/helloworldcnm/article/details/147336297  浏览:    关键词:JVM之经典垃圾回收器

一、垃圾回收算法

1. 标记-清除(Mark-Sweep)
  • 步骤
    1. 标记:遍历对象图,标记所有存活对象。
    2. 清除:回收未被标记的垃圾对象。
  • 特点:简单,但会产生内存碎片。
2. 标记-复制(Mark-Copy)
  • 步骤
    1. 将内存分为两个区域(From 和 To)。
    2. 标记存活对象,复制到 To 区。
    3. 清空 From 区,交换 From/To 角色。
  • 特点:无碎片,但浪费一半内存。
3. 标记-整理(Mark-Compact)
  • 步骤
    1. 标记存活对象。
    2. 整理存活对象到内存一端。
    3. 清理边界外的空间。
  • 特点:无碎片,但整理耗时。
4. 分代收集
  • 核心思想:将堆分为新生代和老年代,分别用不同算法。
  • 新生代:标记-复制。
  • 老年代:标记-清除或标记-整理。

二、收集器执行流程图示

1. Serial / Serial Old
[新生代(标记-复制)]
1. 暂停所有用户线程(STW)┌───────────┐       ┌───────────┐│  From区   │ ----> │   To区    ││存活对象复制│       │ 清空后作为 │└───────────┘       |  新From   |└───────────┘[老年代(标记-整理)]
1. 标记存活对象
2. 整理到内存一端
3. 清理剩余空间
2. ParNew
[多线程 标记-复制]
1. STW,多个线程并行复制存活对象2. 清空 From 区
3. Parallel Scavenge / Parallel Old
[新生代(标记-复制)]
1. 多线程快速复制,专注吞吐量[老年代(标记-整理)]
1. 多线程整理,最大化利用CPU
4. CMS
[标记-清除算法]
1. 初始标记(STW短暂) --> 标记根对象│
2. 并发标记          --> 线程与用户线程并行标记│
3. 重新标记(STW)    --> 修正并发期间的变动│
4. 并发清除          --> 清理垃圾(产生碎片)
5. G1
[混合算法(标记-复制 + 标记-整理)]
1. 初始标记(STW短暂)  │
2. 并发标记          │
3. 最终标记(STW)    │
4. 筛选回收(STW可控) --> 选择垃圾最多的Region复制/整理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词