3
我正在研究弱引用。而且我明白所有弱引用將在OutOfMemoryError發生之前被垃圾收集。我做了一個簡單的測試是這樣的(我知道追趕OOME並不好,但只是一個測試):弱引用沒有收集垃圾?
Integer weakInt = new Integer(10);
WeakReference<Integer> weakReference = new WeakReference<Integer>(weakInt);
try {
while (weakReference != null) {
String[] generateOutOfMemoryStr = new String[999999999];
}
}
catch (OutOfMemoryError oome) {
System.out.println(weakReference.get());
}
我預計空要打印,因爲弱引用應該被收集,但我總是得到的輸出10.
請讓我知道我要去哪裏錯了。可能我理解弱引用的概念錯了嗎?
非常感謝這個one..Just一個愚蠢的問題,可以:)後,你做weakInt爲空,我想了WeakReference .get()應該總是返回null?...但令人驚訝的是,它在執行OutOfMemoryError之前執行了幾次。 – Basith 2011-06-05 19:32:24
@Basith:爲什麼它總是返回null?我們剛剛設置了一個*變量*的值爲空。我們可以將它設置爲引用一個不同的'Integer' - 這不會改變'weakReference'的目標。假設我們有'Integer x = new Integer(10)',那麼'WeakReference'離開等式。整數y = x; x =新的整數(20); System.out.println(y);' - 你期望打印什麼? – 2011-06-05 19:34:25
再次感謝..明白它現在真的很好:) – Basith 2011-06-05 19:42:15