常见的垃圾回收算法?
JVM 面试题发布于
一、判断对象是否可回收
- 引用计数法:对象被引用计数 +1,为 0 则回收。无法解决循环引用。
- 可达性分析:从 GC Roots 出发,不可达的对象可回收。GC Roots 包括栈中引用、静态变量、常量、JNI 引用。
二、回收算法
- 标记-清除:标记存活对象,清除垃圾。缺点:内存碎片。
- 标记-复制:内存分两块,存活对象复制到另一块,清空原块。缺点:内存利用率低。
- 标记-整理:标记后把存活对象移到一端,清除边界外。无碎片,但移动开销大。
- 分代收集:新生代用复制算法(对象朝生夕灭),老年代用标记-清除或标记-整理。
三、垃圾收集器
- Serial / ParNew / Parallel Scavenge(新生代,复制)
- CMS / G1 / ZGC(老年代或整堆)