java四大引用總結

utf發表於2018-01-01

問題

java中有哪幾種引用?它們的含義和區別是什麼?

強引用

Object obj = nww Object()

只要強引用還存在,垃圾收集器永遠不會回收掉被引用的物件

軟引用

SoftReference<Bitmap> bitmapSoftReference = new SoftReference<Bitmap>(bitmap);

軟引用是用來描述一些還有用但並非必須的物件。對於軟引用關聯的物件,在系統將要發生記憶體溢位異常之前,將會把這些物件列進回收範圍之中進行第二次回收。如果這次回收還沒有足夠的記憶體,才會丟擲記憶體溢位異常。

弱引用

WeakReference<Bitmap> bitmapWeakReference = new WeakReference<Bitmap>(bitmap);

弱引用也是用來描述非必須的物件的,它的強度比軟引用更弱一些,被弱引用關聯的物件只能生存到下一次垃圾收集發生之前。當垃圾收集器工作時,無論當前記憶體是否足夠,都會回收掉只被弱引用關聯的物件

虛引用

一個物件是否有虛引用的存在,完全不會對其生存時間構成影響,也無法通過虛引用來取得一個物件例項。為一個物件設定虛引用關聯的唯一目的就是能在這個物件被收集器回收是收到一個系統通知

四種引用方式引用強度: 強引用 > 軟引用 > 弱引用 > 虛引用

高效的單例模式

雙層的判斷減少synchronized佔用的系統資源的開銷

 public static BinderPool getInsance(Context context) {
    if (sInstance == null) {
        synchronized (BinderPool.class) {
            if (sInstance == null) {
                sInstance = new BinderPool(context);
            }
        }
    }
    return sInstance;
}
複製程式碼

相關文章