Java 面试题:GC 回收算法与收集器

一、对象存活判定

可达性分析:从 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、减少大对象。