Java中強、軟、弱、虛四種引用詳解
1. 強引用
強引用就是指在程式程式碼之中普遍存在的,指建立一個物件並把這個物件賦給一個引用變數,並沒有像其它三種引用一樣有一個就具體的類來描述。對於強引用物件,即使記憶體不足,JVM寧願丟擲OutOfMemoryError (OOM)錯誤也不會回收這種物件。
例如:
Object object =new Object(); String str ="hello";
如果想中斷強引用和某個物件之間的關聯,可以顯示地將引用賦值為null,這樣一來的話,JVM在合適的時間就會回收該物件。比如各種集合的移除方法。
2. 軟引用
SoftReference< People > aSoftRef=new SoftReference< People >(obj)
軟引用是用來描述一些還有用但並非必需的物件。只使用SoftReference類修飾的物件就是一個軟引用物件(軟可到達物件),如果一個物件只具有軟引用,記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體空間不足了,就會回收這些物件的記憶體。只要垃圾回收器沒有回收它,該物件就可以被程式使用。
常常用於快取操作,把某個物件標記為軟引用時,當記憶體足夠就不會回收,記憶體不足就會回收,比如網頁快取,圖片快取等。並且軟引用都會保證在虛擬機器丟擲OutOfMemoryError之前已經被清除。
3. 弱引用
WeakReference< People > reference=new WeakReference< People >(obj);
弱引用也是用來描述非必需物件的。只使用WeakReference類修飾的物件就是一個弱引用物件(弱可達物件)。弱引用的物件相比軟引用擁有更短暫的生命週期。無論記憶體是否足夠,一旦下次垃圾回收器執行後掃描到弱引用,便會回收。 不過,由於垃圾回收器是一個優先順序很低的執行緒,因此不一定會很快發現那些只具有弱引用的物件。
Java中有WeakHashMap類,以及THreadLocal中的ThreadLocalMap內部節點Entry,他們都是WeakReference的實現。
4. 虛引用
PhantomReference< People > pr = new PhantomReference< People > (object, ReferenceQueue);
虛引用也稱為幽靈引用或者幻影引用,它是最弱的一種引用關係,虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用佇列 (ReferenceQueue)聯合使用。
無法透過get獲取該引用,但其實虛引用其實是持有物件引用的,只是PhantomReference的get方法的實現永遠返回null。
先要糾正一種觀點,一個物件被關聯成虛引用,是完全有可能影響其生命週期的,虛引用有潛在的記憶體洩露風險,因為JVM不會自動幫助我們釋放,我們必須要保證它指向的堆物件是不可達的。
一個物件設定虛引用關聯的唯一目的就是能在這個物件被收集器回收時會被加入到相關引用佇列中,常常被用於管理堆外記憶體的清理,DirectByteBuffer等能夠申請堆外記憶體的物件均與一個虛引用相關聯,當DirectByteBuffer物件被回收時,會被加入到一個引用佇列,此時GC會判斷佇列中的物件,並且對DirectByteBuffer物件申請的堆外記憶體進行清理。
本文來源於: 奈學開發者社群,如有侵權請聯絡我刪除~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976011/viewspace-2716780/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java四大引用詳解:強引用、軟引用、弱引用、虛引用Java
- Java四種引用包括強引用,軟引用,弱引用,虛引用。Java
- Java/Android中的強引用、軟引用、弱引用、虛引用JavaAndroid
- Java的強引用、軟引用、弱引用、虛引用Java
- 強引用 軟引用 弱引用 虛引用
- 強引用,軟引用,弱引用,虛引用
- 強引用、軟引用、弱引用、虛引用
- 理解Java的強引用、軟引用、弱引用和虛引用Java
- 強引用、軟引用、弱引用與虛引用
- Java 中的強引用、軟引用、弱引用和虛引用分別是什麼?Java
- Java常見知識點彙總(⑲)——Java中的強引用、弱引用、軟引用、虛引用Java
- 【JVM】如何理解強引用、軟引用、弱引用、虛引用?JVM
- java的強引用、軟引用、弱引用、幻象引用,引用佇列總結Java佇列
- Java引用型別解析:掌握強引用、軟引用、弱引用和幻象引用的妙用Java型別
- Java中的弱引用Java
- 強引用、軟引用、弱引用、幻象引用有什麼區別?
- 老徐和阿珍的故事:強引用、軟引用、弱引用、虛引用,傻傻分不清楚
- Java 四種引用的解讀Java
- 強引用、軟引用、弱引用、幻象引用再不理解就晚了
- 關於強引用、軟引用、弱引用、幻象引用,你該如何回答?
- 詳聊Java的四種引用型別Java型別
- Java的四種引用Java
- 垃圾回收(四)【弱引用】
- Java中的方法引用詳解Java
- 十分鐘理解Java中的弱引用Java
- Java的四種引用和回收策略Java
- python3學習筆記之 強引用和弱引用Python筆記
- Java虛擬機器詳解(四)------垃圾收集器Java虛擬機
- 安卓四種引用安卓
- 美團一面:說一說Java中的四種引用型別?Java型別
- 詳解 Java 中的三種代理模式Java模式
- Java中的四大引用筆記Java筆記
- 面試官:說說Java物件的四種引用方式面試Java物件
- 四種設計模式詳解設計模式
- Java四種記憶體屏障詳解,LoadLoad、LoadStore、StoreLoad、StoreStoreJava記憶體REST
- 類與介面(二)java的四種內部類詳解Java
- 【Java】弱項強化筆記Java筆記
- Android中點選事件的四種寫法詳解Android事件