JVM的 6 种垃圾回收算法

JVM的垃圾回收(Garbage Collection, GC)算法,在面试八股文时偶尔会被问到,了解一些常见的垃圾回收算法有利于面试时吊打面试官。

以下是JVM常见的几种垃圾回收算法的介绍:

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

这是最基本的垃圾回收算法,主要步骤包括:

  • 标记:从GC Root出发,标记所有可达的对象。
  • 清除:遍历堆内存,清除所有未被标记的对象。
  • 优点:简单,不需要移动对象。
  • 缺点:会产生内存碎片。

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

为了解决标记-清除算法的内存碎片问题,引入了标记-整理算法:

  • 标记:和标记-清除算法相同,标记所有可达对象。
  • 整理:将存活对象压缩到堆的一端,清理边界外的内存。
  • 优点:减少了内存碎片。
  • 缺点:移动对象需要额外的成本。

3. 复制算法(Copying)

复制算法主要用于年轻代(Young Generation)对象的回收:

  • 步骤:将存活的对象从一个内存区域复制到另一个内存区域,原来的内存区域全部清空。
  • 优点:效率高,没有碎片问题。
  • 缺点:需要额外的内存空间。

4. 分代收集算法(Generational Collection)

现代JVM使用分代收集算法,将堆内存分为不同的代(年轻代、年老代)进行管理:

  • 年轻代(Young Generation):主要使用复制算法,分为Eden区和两个Survivor区(From和To)。
  • 年老代(Old Generation):主要使用标记-整理算法。
  • 持久代(Permanent Generation):用于存储类元数据,Java 8之后改为元空间(Metaspace)。
  • 优点:根据对象的生命周期优化回收效率。
  • 缺点:需要更多的调优和管理。

5. CMS(Concurrent Mark-Sweep)

CMS是为了减少GC暂停时间的一种垃圾回收器,主要用于年老代:

  • 步骤
    • 初始标记(Initial Mark):标记GC Root直接可达的对象。
    • 并发标记(Concurrent Mark):并发地标记所有可达对象。
    • 重新标记(Remark):修正并发标记期间产生的新对象。
    • 并发清除(Concurrent Sweep):并发地清除未被标记的对象。
  • 优点:降低了停顿时间。
  • 缺点:会产生内存碎片,且并发清理阶段对CPU资源要求较高。

6. G1(Garbage-First)

G1垃圾回收器是一种面向服务端应用的低暂停垃圾回收器,适用于大堆内存环境:

  • 区域(Region):将堆划分为若干固定大小的区域,每个区域可以是年轻代或老年代的一部分。
  • 回收过程
    • 初始标记(Initial Mark):标记GC Root直接可达的对象。
    • 并发标记(Concurrent Mark):并发地标记所有可达对象。
    • 最终标记(Final Mark):标记那些在并发标记阶段还存活的对象。
    • 筛选回收(Live Data Counting and Evacuation):根据每个区域的回收价值进行回收。
  • 优点:通过分区和增量回收,优化了停顿时间。
  • 缺点:相对较新,需要更多的调优。

了解和调优这些垃圾回收算法对于Java应用性能优化非常关键。根据不同应用场景选择合适的GC策略,可以显著提升系统的稳定性和响应速度。

相关推荐
KaMeidebaby2 分钟前
卡梅德生物技术快报|抗体的制备与纯化:分子实验实操:番茄 sHSP 重组表达与抗体的制备与纯化工艺
前端·数据库·人工智能·其他·算法·百度·新浪微博
Han.miracle22 分钟前
Java HashMap 与 ConcurrentHashMap 核心原理总结:从 Hash 冲突到 LongAdder
java·算法·哈希算法
菜菜的顾清寒24 分钟前
力扣HOT100(35)回溯-全排列
算法·leetcode·职场和发展
weixin_4684668529 分钟前
目标识别算法落地实战:从选型到部署的全流程指南
图像处理·人工智能·python·算法·目标检测·机器视觉·目标识别
MicroTech202529 分钟前
微算法科技(NASDAQ :MLGO)量子启发进化算法(QEA)与区块链(BC)集成技术:构建高可靠去中心化创新方案
科技·算法·量子计算
CQU_JIAKE31 分钟前
5.27【A】
算法
江屿风36 分钟前
C++OJ题经验总结(竞赛)3
开发语言·c++·笔记·算法
手写码匠42 分钟前
从零手写 SQL 查询引擎:解析器、优化器与执行器实战
人工智能·深度学习·算法·aigc
Tisfy1 小时前
LeetCode 3121.统计特殊字母的数量 II:状态机
算法·leetcode·题解·状态机
zzzsde1 小时前
【Linux网络】传输层协议UDP
linux·服务器·开发语言·网络·算法·udp