🎯 一、JVM 为什么需要垃圾回收算法?
因为:
-
Java 会不停地创建对象(
new
) -
有些对象很快就没用了
-
为了避免内存爆掉,JVM 会自动清理“没用了的对象”
怎么清理?→ 就靠 GC 算法
✅ 二、JVM 的几种经典 GC 算法(按时间线 + 适用阶段)
算法名 | 属于哪代 | 特点 | 是否 STW |
---|---|---|---|
1. 标记-清除 | 老年代 | 经典算法,先标记,再清除 | 是 |
2. 标记-压缩 | 老年代 | 清完后压缩对象,防止内存碎片 | 是 |
3. 复制算法 | 新生代 | 空间换时间,效率高 | 是 |
4. 分代收集 | 整个堆 | JVM 默认使用的“混合策略” | 是(部分阶段可并发) |
5. G1 算法 | 新生代 + 老年代 | 分区 + 并发 + 可控停顿 | 是(短) |
6. ZGC/Shenandoah | 新生代 + 老年代 | 高并发,低延迟,暂停极短 | 是(极短) |