前言
垃圾收集器进行垃圾回收的依据是判断对象是否“存活”,判断对象是否存活有两种方法。
引用计数法
在对象中添加一个引用计数器,每当有一个地方引用该对象时,计数器值加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是已经“死亡”要被回收的。
引用计数法存在一个问题:对象之间的循环引用
public class ReferenceCountingTest {
public Object instance = null;
public static void main(String[] args) {
ReferenceCountingTest a = new ReferenceCountingTest();
ReferenceCountingTest b = new ReferenceCountingTest();
a.instance = b;
b.instance = a;
a = null;
b = null;
// 假设在这行发生 GC,a和b是否能被回收?
System.