考慮下面的代碼片段: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