一、对象存活判定
可达性分析:从 GC Roots(栈帧局部变量、静态变量、常量引用、JNI 引用)出发不可达即回收,替代引用计数避免循环引用问题。
二、四种引用
| 引用 | 回收时机 | 用途 |
|---|---|---|
| 强 | 不回收 | 普通对象 |
| 软 Soft | 内存不足才回收 | 缓存 |
| 弱 Weak | 下次 GC 必回收 | WeakHashMap |
| 虚 Phantom | 仅收通知 | 堆外内存回收钩子 |
三、回收算法与收集器
- 算法:标记-清除(碎片)、复制(新生代)、标记-整理(老年代);
- 分代:新生代(Eden+2 Survivor)Minor GC 频繁,老年代 Major/Full GC 慢;
- 收集器:Serial → Parallel → CMS(并发标记清除)→ G1(Region 增量)→ ZGC/Shenandoah(超低停顿)。
Full GC 应尽量避免(STW 长),靠合理堆大小、选 G1/ZGC、减少大对象。