強引用、軟引用、弱引用、虛引用

1.強引用(StrongReference)html

只要某個對象有強引用與之關聯,JVM一定不會回收這個對象,即便在內存不足的狀況下,JVM寧願拋出OutOfMemory錯誤也不會回收這種對象。java

 

2.軟引用(SoftReference)htm

  軟引用是用來描述一些有用但並非必需的對象,在Java中用java.lang.ref.SoftReference類來表示。對於軟引用關聯着的對象,只有在內存不足的時候JVM纔會回收該對象。對象

    軟引用能夠和一個引用隊列(ReferenceQueue)聯合使用,若是軟引用所引用的對象被JVM回收,這個軟引用就會被加入到與之關聯的引用隊列中。blog

 

3.弱引用(WeakReference)生命週期

  弱引用也是用來描述非必需對象的,當JVM進行垃圾回收時,不管內存是否充足,都會回收被弱引用關聯的對象。在java中,用java.lang.ref.WeakReference類來表示。隊列

    弱引用能夠和一個引用隊列(ReferenceQueue)聯合使用,若是弱引用所引用的對象被JVM回收,這個軟引用就會被加入到與之關聯的引用隊列中。內存

4.虛引用(PhantomReference)垃圾回收

  虛引用和前面的軟引用、弱引用不一樣,它並不影響對象的生命週期。在java中用java.lang.ref.PhantomReference類表示。若是一個對象與虛引用關聯,則跟沒有引用與之關聯同樣,在任什麼時候候均可能被垃圾回收器回收。引用

  要注意的是,虛引用必須和引用隊列關聯使用,當垃圾回收器準備回收一個對象時,若是發現它還有虛引用,就會把這個虛引用加入到與之 關聯的引用隊列中。程序能夠經過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收。若是程序發現某個虛引用已經被加入到引用隊列,那麼就能夠在所引用的對象的內存被回收以前採起必要的行動。

 

http://www.cnblogs.com/dolphin0520/p/3784171.html

相關文章
相關標籤/搜索