Java WeakReference的理解與使用

在Java里, 當一個對象o被創(chuàng)建時, 它被放在Heap里. 當GC運行的時候, 如果發(fā)現(xiàn)沒有任何引用指向o, o就會被回收以騰出內(nèi)存空間. 或者換句話說, 一個對象被回收, 必須滿足兩個條件: 1)沒有任何引用指向它 2)GC被運行.


導致內(nèi)存泄漏例子:

A a = new A();
B b = new B(a);
a = null;

1356321982_8457.jpg

A對象的引用a置空了,a不再指向?qū)ο驛的地址,我們都知道當一個對象不再被其他對象引用的時候,是會被GC回收的,很顯然及時a=null,那么A對象也是不可能被回收的,因為B依然依賴與A,在這個時候,造成了內(nèi)存泄漏!

使用WeakReference解決:

public class B
{
    WeakReference<A> weakA;
    public B(A a)
    {
        WeakReference<A> weakA = new WeakReference<A>(a);
    }
    public A getA()
    {
        return weakA.get();
    }
}
A a = new A();
B b = new B(a);
a = null;
b.getA();   // 返回null

這樣不會造成內(nèi)存泄漏,其中b.getA()會返回null,使用時需判空

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容