JAVA的四種引用方式

JAVA的四種引用方式

1.強弱軟虛
在java中,引用類型分爲四種。強引用,弱引用,軟引用,虛引用。這種起名的方式也包含了內存回收的某些規則。

2.強引用
2.1強引用的使用方法:
_1.直接new出一個對象

Person person = new Person();

2.2強引用的特點:
2.2.1.強引用可以直接訪問對象
2.2.2.javai虛擬機在進行內存回收的時候,即使拋出了OOM錯誤也不會回收具有強引用的對象。

3.軟引用
3.1軟引用的使用方法:

MyObject aRef = new  MyObject();
SoftReference aSoftRef = new SoftReference(aRef);
MyObject anotherRef = (MyObject)aSoftRef.get();

3.2軟引用的特點
3.2.1軟引用一般情況下不會被JVM回收,當JVM儲存對象的堆接近閾值的時候,纔會考慮回收具有軟引用的對象。
3.2.2 軟引用可以和一個引用隊列一起使用,當我們具有軟引用的對象被回收的時候,JVM會將它放到引用隊列中來。我們可以通過這個引用隊列來判斷是否我們需要的軟引用被JVM回收了。

ReferenceQueue queue = new  ReferenceQueue();
SoftReference  ref = new  SoftReference(aMyObject, queue);

我們可以手動從引用隊列中刪除這個軟引用。
看下邊的代碼:

View view = findViewById(R.id.button);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
Drawable drawable = new BitmapDrawable(bitmap);
SoftReference<Drawable> drawableSoftReference = new SoftReference<Drawable>(drawable);
if(drawableSoftReference != null) {
    view.setBackground(drawableSoftReference.get());
}

在JVM空間充足的情況下,圖片可以正常顯示。而當空間比較喫緊的時候,由於我們的圖片是軟引用的,因此JVM可以通過回收我們的大圖片來釋放資源,從而避免OOM的發生。

4.弱引用
4.1弱引用的使用方法:

WeakReference<T> weakReference= new WeakReference<>(T t);

4.2弱引用的特點:
弱引用隨時可能被JVM回收,不一定會等到虛擬機內存不足。
我們在使用handler的時候經常會使用到弱引用。

5.虛引用:
虛引用是所有引用類型中最弱的一個。一個持有虛引用的對象,和沒有引用幾乎是一樣的,隨時都可能被垃圾回收器回收。

6.幾種引用的對比:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章