希望是一个简单的问题.以循环链接列表为例:
class ListContainer
{
private listContainer next;
<..>
public void setNext(listContainer next)
{
this.next = next;
}
}
class List
{
private listContainer entry;
<..>
}
Run Code Online (Sandbox Code Playgroud)
现在因为它是一个循环链接的列表,当添加一个elemnt时,它在它的下一个变量中有一个对它自己的引用.删除列表中唯一的元素时,条目设置为null.是否需要将ListContainer.next设置为null以及垃圾收集器释放它的内存还是自动处理这样的自引用?
让我们考虑以下2个循环引用示例:
直接循环参考
class A {
B b;
}
class B {
A a;
}
Run Code Online (Sandbox Code Playgroud)
class A {
B b;
}
class B {
WeakReference<A> aRef;
}
Run Code Online (Sandbox Code Playgroud)
@Jon Skeet回答的以下SO问题清楚地表明,只要没有来自已知根的"GC行走"存在于循环中,直接的示例也将被垃圾收集.
我的问题如下:
是否有任何理由表现或以其他方式使用或不使用示例2中表示的习语 - 使用WeakReference的习语?