Java Reference

Java Reference

Reference

Java中的Reference對象和GC是緊密聯繫在一塊兒的,Reference的實現也是和GC相關的。 spa

強引用

強引用是Java中使用最廣泛的引用,咱們常常使用的Object o = new Object(),這裏的o就是強引用。若是一個對象具備強引用,那麼GC是必定不會回收這個引用的,它寧願拋出OutOfMemeryError,也不會隨意回收具備強引用的對象。 線程

軟引用

軟引用(SoftReference)在Java中一般用做內存敏感的Cache。被軟引用引用的對象,當沒有其餘強引用存在時,GC並不會當即回收此對象,而是當內存不夠的時候,纔會考慮回收。因此若是內存充足,此對象會一直存在於內存中,能夠被程序使用,用做Cache是再合適不過了。若是咱們使用強引用做爲內存Cache,那麼當內存不夠的狀況下,做爲Cache的這一部份內存是不會被GC回收的;而使用軟引用的話,內存不夠時,GC能夠回收這一部份內存。因此使用軟引用做爲內存Cache能夠不限大小,並且也不用考慮remove操做。 對象

弱引用

弱引用(WeakReference)和軟引用的區別在於,被弱引用引用的對象,當沒有其餘強引用或軟引用存在時,無論內存是否充裕,此對象都會被GC回收。固然可能不會立馬被回收,由於GC線程優先級比較低。 隊列

虛引用

虛引用(PhantomReference)是一種特殊的引用,主要用來跟蹤對象唄垃圾回收的狀態,經過查看引用隊列裏是否包含對象所對應的虛引用來判斷它是否即將被垃圾回收,從而採起行動。它並不被期待用來取的被引用的對象,而是對象被回收前,他的引用會被放入一個ReferenceQueue中,從而達到跟蹤對象垃圾回收的做用。 內存

不一樣引用區別

強引用 - 直接調用被引用對象,不被GC回收,可能致使內存泄露。 rem

軟引用 - get()方法,視內存狀況被GC回收,不會致使內存泄露。 get

弱引用 - get()方法,永遠被GC回收,不可能致使內存泄露。 垃圾回收

虛引用 - 沒法取得,不回收,可能致使內存泄露。 引用

相關文章
相關標籤/搜索