星海

JVM · 主观题 · 第 32 题

Java 后端开发面试 · 第 32 题

JVM 如何判断对象可以回收?常见的垃圾回收算法有哪些,各有什么优缺点?

参考答案

1. 判断方法:引用计数法实现简单,但无法处理循环引用,HotSpot 没有采用;可达性分析从 GC Roots(栈中局部变量、静态变量、常量、JNI 引用、同步锁持有的对象等)出发,走不到的对象就是可回收的。
2. 引用类型:强引用不回收;软引用在内存不足时回收,适合做缓存;弱引用在下次 GC 时回收(ThreadLocalMap 的键、WeakHashMap);虚引用用于跟踪回收事件。
3. 回收算法:标记-清除实现简单,但会产生碎片;复制算法没有碎片、速度快,但要浪费一部分空间,适合存活率低的新生代;标记-整理没有碎片,但移动对象成本高,适合老年代。
4. 分代收集:新生代用复制(Eden:S0:S1 = 8:1:1),对象经过多次 GC 仍存活就晋升到老年代;G1 按 Region 回收;ZGC 和 Shenandoah 做并发整理,追求低停顿。

解析

判断方法、引用类型、三种算法加分代思想。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。