Java的四種引用
1.強引用
如果一個物件具有強引用,那就 類似於必不可少的生活用品,垃圾回收器絕不會回收它。當記憶體空 間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足問題。
2.軟引用(SoftReference)
如果一個物件只具有軟引用,那就類似於可有可物的生活用品。如果記憶體空間足夠,垃圾回收器就不會回收它,如果記憶體空間不足了,就會回收這些物件的記憶體。
只要垃圾回收器沒有回收它,該物件就可以被程式使用。軟引用可用來實現記憶體敏感的快取記憶體。
軟引用可以和一個引用佇列(ReferenceQueue)聯合使用,如果軟引用所引用的物件被垃圾回收,Java虛擬機器就會把這個軟引用加入到與之關聯的引用佇列中。
3.弱引用(WeakReference)
如果一個物件只具有弱引用,那就類似於可有可物的生活用品。 弱引用與軟引用的區別在於:只具有弱引用的物件擁有更短暫的生命週期。
在垃圾回收器執行緒掃描它 所管轄的記憶體區域的過程中,一旦發現了只具有弱引用的物件,不管當前記憶體空間足夠與否,都會回收它的記憶體。不過,由於垃圾回收器是一個優先順序很低的執行緒, 因此不一定會很快發現那些只具有弱引用的物件。
弱引用可以和一個引用佇列(ReferenceQueue)聯合使用,如果弱引用所引用的物件被垃圾回收,Java虛擬機器就會把這個弱引用加入到與之關聯的引用佇列中。
4.虛引用(PhantomReference)
"虛引用"顧名思義,就是形同虛設,與其他幾種引用都不同,虛引用並不會決定物件的生命週期。如果一個物件僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收。
虛 引用主要用來跟蹤物件被垃圾回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用佇列(ReferenceQueue)聯合使用。
當垃 圾回收器準備回收一個物件時,如果發現它還有虛引用,就會在回收物件的記憶體之前,把這個虛引用加入到與之關聯的引用佇列中。程式可以透過判斷引用佇列中是 否已經加入了虛引用,來了解
被引用的物件是否將要被垃圾回收。程式如果發現某個虛引用已經被加入到引用佇列,那麼就可以在所引用的物件的記憶體被回收之前採取必要的行動。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2216063/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 四種引用的解讀Java
- Java四種引用包括強引用,軟引用,弱引用,虛引用。Java
- Java的四種引用和回收策略Java
- 詳聊Java的四種引用型別Java型別
- 面試官:說說Java物件的四種引用方式面試Java物件
- 安卓四種引用安卓
- Java中強、軟、弱、虛四種引用詳解Java
- 這次把Java的四種引用一次性說清楚Java
- Java四大引用詳解:強引用、軟引用、弱引用、虛引用Java
- java的四大引用型別Java型別
- 美團一面:說一說Java中的四種引用型別?Java型別
- Java中的四大引用筆記Java筆記
- 什麼是java四大引用?Java
- Java 建立類的四種方式Java
- java中Stream的四種建立Java
- Java的強引用、軟引用、弱引用、虛引用Java
- Java/Android中的強引用、軟引用、弱引用、虛引用JavaAndroid
- 理解Java的強引用、軟引用、弱引用和虛引用Java
- java的強引用、軟引用、弱引用、幻象引用,引用佇列總結Java佇列
- Java中的引用Java
- Java遍歷Map物件的四種方式Java物件
- Java常見知識點彙總(⑲)——Java中的強引用、弱引用、軟引用、虛引用Java
- Java引用型別解析:掌握強引用、軟引用、弱引用和幻象引用的妙用Java型別
- Java建立多執行緒的四種方式Java執行緒
- 【java】int轉換成String的四種方法Java
- Java 四種執行緒池的用法分析Java執行緒
- java自帶的四種執行緒池Java執行緒
- Java中的弱引用Java
- java中的引用物件Java物件
- Java 中的方法引用Java
- 垃圾回收(四)【弱引用】
- Java 中的強引用、軟引用、弱引用和虛引用分別是什麼?Java
- java語言複製陣列的四種方法Java陣列
- Java中轉義HTML符號的四種方法JavaHTML符號
- Java中的引用與ThreadLocalJavathread
- java陣列元素的引用Java陣列
- java中常見的四種執行緒池的區別Java執行緒
- Java程式猿必會的四種執行緒池Java執行緒