Java 對象的引用方式有如下四種,這四種方式主要是為了給垃圾回收提供更靈活的操作:
1、強引用,最常見的引用方式,當一個對象被一個或一個以上的引用變量引用時,它處於可達狀態,這時不會被垃圾回收器回收。
2、軟引用(SoftReference),通常用於內存敏感的程序中,當一個對象只有軟引用時,當系統空間足夠時,系統不會回收它,當系統空間不夠時,系統可能回收它。
3、弱引用(WeakReference),不管系統空間是否足夠,總會回收該對像所占用的內存。
4、虛引用(PhangtomReference),類似與完全沒有引用,虛引用主要用於跟蹤對象被垃圾回收的狀態,它不能單獨使用,必須和引用隊列(ReferenceQueue)一起使用,當該引用的對象被垃圾回收之後,虛引用將進入引用隊列中,虛引用不能通過get方法,獲取正常的引用。
示例如下:
import java.lang.ref.PhantomReference; import java.lang.ref.ReferenceQueue; public class PhantomReferenceTest { public static void main(String[] args) { String str = new String("Hello World"); ReferenceQueue referenceQueue = new ReferenceQueue<>(); PhantomReference<String> phantomReference = new PhantomReference<String>(str, referenceQueue); str = null; System.out.println(phantomReference.get()); System.gc(); System.runFinalization(); System.out.println(referenceQueue.poll() == phantomReference); } }
運行結果:
null true
虛引用不能通過虛引用訪問被引用的對象,但是當垃圾回收後,虛引用進入了ReferenceQueue。