考虑下面的代码片段:WeakReference对象是否也与引用的对象一起收集垃圾?
private void foo() {
A a = new A();
WeakReference<A> weakA = new WeakReference<A>(a);
a = null;
while (true) {
if (weakA.get() != null)
System.out.println("weakA.get() != null !!!");
else
System.out.println("weakA.get() == null");
}
}
这是必要的“如果”的句子也包含空检查为“weakA”对象(WeakReference的对象)?类似这样的:
if (weakA != null && weakA.get() != null)
或者这只是一个冗余检查在这种情况下?我这样问是因为我看过很多代码和教程,用于检查WeakReference是否为空,并且我不确定是否因为当保存的引用对象是GC时,VM删除WeakReference本身。
在此先感谢。
编辑:
你可以看到这个模式的例子本教程空校验: http://android-developers.blogspot.com.ar/2010/07/multithreading-for-performance.html
但我也发现它在Multithreading For Performance。在这种情况下,它会检查AsyncTask.onPostExecute()方法中的WeakReference是否为null,但它并未明确地向WeakReference对象赋值,所以我猜测WeakReference本身是否为null是多余的。
谢谢阿克塞尔,我只需要确认一些非常明显的事情,但我必须确定我没有错过任何东西。 – mevqz 2015-03-30 18:29:57
我编辑过这篇文章来引用我提到的例子 – mevqz 2015-03-30 18:32:15