Java 四種引用介紹及使用場景


 

強引用-FinalReference

介紹: 
強引用是平常中使用最多的引用,強引用在程序內存不足(OOM)的時候也不會被回收,使用方式

String str = new String("str");

這個str就是強引用。 
可用場景: 
地球人都知道,但是我講不出來。

軟引用-SoftReference

介紹: 
軟引用在程序內存不足時,會被回收,使用方式:

// 注意:wrf這個引用也是強引用,它是指向SoftReference這個對象的,
// 這里的軟引用指的是指向new String("str")的引用,也就是SoftReference類中T SoftReference<String> wrf = new SoftReference<String>(new String("str"));

可用場景: 
創建緩存的時候,創建的對象放進緩存中,當內存不足時,JVM就會回收早先創建的對象。PS:圖片編輯器,視頻編輯器之類的軟件可以使用這種思路。 
軟引用使用例子傳送門:https://www.cnblogs.com/mjorcen/p/3968018.html

弱引用-WeakReference

介紹: 
弱引用就是只要JVM垃圾回收器發現了它,就會將之回收,使用方式:

WeakReference<String> wrf = new WeakReference<String>(str);

 

可用場景: 
Java源碼中的java.util.WeakHashMap中的key就是使用弱引用,我的理解就是,一旦我不需要某個引用,JVM會自動幫我處理它,這樣我就不需要做其它操作。 
弱引用使用例子傳送門:http://www.importnew.com/21206.html

虛引用-PhantomReference

介紹: 
虛引用的回收機制跟弱引用差不多,但是它被回收之前,會被放入ReferenceQueue中。注意哦,其它引用是被JVM回收后才被傳入ReferenceQueue中的。由於這個機制,所以虛引用大多被用於引用銷毀前的處理工作。還有就是,虛引用創建的時候,必須帶有ReferenceQueue,使用例子:

PhantomReference<String> prf = new PhantomReference<String>(new String("str"), new ReferenceQueue<>());

 

可用場景: 
對象銷毀前的一些操作,比如說資源釋放等。Object.finalize()雖然也可以做這類動作,但是這個方式即不安全又低效(傳送門:http://blog.csdn.net/aitangyong/article/details/39450341),so。

強調

上訴所說的幾類引用,都是指對象本身的引用,而不是指Reference<T>的四個子類的引用(SoftReference<T>等)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM