Java中強引用,軟引用,弱引用概念解析
1.概念解釋強引用是使用最普遍的引用:Object o=new Object(); 特點:不會被GC
將對象的引用顯示地置為null:o=null; // 幫助垃圾收集器回收此對象
舉例ArrayList的實現源代碼:
<img src='https://pic2.zhimg.com/50/dd6f826c4e0c045f3701978f311636e1_hd.png' data-rawwidth='361' data-rawheight='159'>
軟引用用來描述一些還有用但是并非必須的對象,在Java中用java.lang.ref.SoftReference類來表示。對于軟引用關聯著的對象,只有在內存不足的時候JVM才會回收該對象。因此,這一點可以很好地用來解決OOM的問題,并且這個特性很適合用來實現緩存:比如網頁緩存、圖片緩存等。
瀏覽器網頁緩存實例:
<img src='https://pic4.zhimg.com/50/34a44802709c83869b50c5e16b8256db_hd.png' data-rawwidth='738' data-rawheight='143'>
軟引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果軟引用所引用的對象被垃圾回收器回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。
弱引用與軟引用的區別在于:只具有弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由于垃圾回收器是一個優先級很低的線程,因此不一定會很快發現那些只具有弱引用的對象。 如果這個對象是偶爾的使用,并且希望在使用時隨時就能獲取到,但又不想影響此對象的垃圾收集,那么你應該用 Weak Reference 來記住此對象。
實例:
<img src='https://pic4.zhimg.com/50/5000607cf6d43abd0533624cadea18bb_hd.png' data-rawwidth='743' data-rawheight='463'>
虛引用也稱為幻影引用:一個對象是都有虛引用的存在都不會對生存時間都構成影響,也無法通過虛引用來獲取對一個對象的真實引用。唯一的用處:能在對象被GC時收到系統通知,JAVA中用PhantomReference來實現虛引用。
2.對比不同:<img src='https://pic3.zhimg.com/50/65b7abe9bf2fcd249c789024d95bb67a_hd.jpg' data-rawwidth='858' data-rawheight='378'>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章: