让我们考虑以下 2 个循环引用示例:
直接循环参考
class A {
B b;
}
class B {
A a;
}
class A {
B b;
}
class B {
WeakReference<A> aRef;
}
@Jon Skeet回答的以下SO 问题清楚地表明,只要循环中不存在来自已知根的“GC walk”,直接示例也将被垃圾收集。
我的问题如下:
是否有任何理由使用或不使用示例 2 中表示的习语 - 使用 WeakReference 的习语?