對大部分對象而言,程序裏會有一個引用變量引用該對象,這是最多見的引用方式。java
除此以外,java.lang.ref包下提供了3個類:SoftReference、WeakReference和PhantomReference,它們分別表明了系統對對象的3種引用方式:軟引用、弱引用和虛引用。spa
所以Java語言對對象的引用有以下4種方式:對象
1. 強引用:隊列
這是Java程序中最多見的引用方式。程序建立一個對象,並把這個對象賦給一個引用變量,程序經過該引用變量來操做實際的對象。內存
當一個對象被一個或一個以上的引用變量所引用時,它處於可達狀態,不可能被系統垃圾回收機制回收。get
2. 軟引用(SoftReference):io
軟引用經過SoftReference類來實現,當一個對象只有軟引用時,它有可能被垃圾回收機制回收。變量
對於只有軟引用的對象而言,當系統內存空間足夠時,它不會被系統回收,程序也可以使用該對象;當系統內存空間不足時,系統可能會回收它。垃圾回收
軟引用一般用於對內存敏感的程序中。引用
3. 弱引用(WeakReference):
弱引用經過WeakReference類來實現,弱引用和軟引用很像,但弱引用的引用級別更低。
對於只有弱引用的對象而言,當系統垃圾回收機制運行時,無論系統內存是否足夠,總會回收該對象所佔用的內存。
固然,並非說當一個對象只有弱引用時,它就會當即被回收---正如那些失去引用的對象同樣,必須等到系統垃圾回收機制運行時纔會被回收。
4. 虛引用(PhantomReference):
虛引用經過PhantomReference類來實現,虛引用徹底相似於沒有引用。虛引用對對象自己沒有太大影響,對象甚至感受不到虛引用的存在。
若是一個對象只有一個虛引用時,那麼它和沒有引用的效果大體相同。
虛引用主要用於跟蹤對象被垃圾回收的狀態,虛引用不能單獨使用,虛引用必須和引用隊列(ReferenceQueue)聯合使用。
上面三個引用類都包含了一個get方法,用於獲取被它們所引用的對象。