2
我讀this由於我在我的代碼與弱引用,當我遇到這個小紙條來有一些內存的問題:使用WeakReference時,在Java中使用後必須設置爲null的強引用?
你必須明確地設置強引用無效使用後:
這個不是很明顯:你可能會認爲一旦超出範圍,強參考就不復存在。但是,JVM不需要這麼做,出於效率考慮,不會這樣做。強引用保留在堆棧框架中,並可能妨礙垃圾收集。
這是真的嗎?如果我這樣做:
void foo(){
Object obj = weakRef.get();
doStuffWith(obj);
}
需要它,我設置obj = null
當我用的方法進行,否則我會泄露OBJ?
不,你不必設置爲空引用。您所引用的部分是書面的誤導性內容:它屬於「斷路器」示例,該示例出現幾段。我不確定何時/爲何移動它,但會編輯文檔並重新發布。 – kdgregory
@kdgregory - 當您有機會時,隨時將您的評論移至答案。 –
@kdgregory「現在你需要知道的只是Java使用了一種標記清除緊湊垃圾回收的形式」這完全取決於實現,甚至實際上在今天看着Hotspot表明這不是真的(這裏有六十多種不同的算法,上帝知道現在有多少種可能的組合)。或者更重要:默認情況下,年輕一代使用停止和複製gc。 – Voo