java.lang.ref包下提供了三個類SoftReference,phantomReference WeakReference,分別代表軟引用,虛引用和弱引用
C#中沒有這些概念
強引用,最常見的引用,程序創建一個對象,並把這個對象賦值給一個引用變量,通過該引用來實際操作對象
軟引用,需要通過SoftReference類來實現,當一個對象只有一個軟引用,它有可能被垃圾回收機制回收。內存空間足夠時,不會被回收,不足夠時將被回收
弱引用,需要通過WeakReference類來實現,當垃圾回收機制運行時,不管內存是否足夠,總會回收該對象所佔用的內存
虛引用,通過phantomReference 類實現,虛引用類似於完全沒有引用。主要用於跟蹤對象被回收的狀態 ,不能單獨使用,必須和引用隊列(ReferenceQueue)聯合使用
上面三個引用類都包含一個get方法,用於獲取它們所引用的對象
引用隊列由java.langl.ref.ReferenceQueue類表示,用於保存被回收後對象的引用
01.import java.lang.ref.WeakReference;
02.public class TestReference
03.{
04. public static void main(String[] args)
05. {
06. //創建一個字符串對象
07. String str = new String("Structs2 權威指南");
08. //創建一個弱引用,讓此引用引用到"Struts2 權威指南"字符串
09. WeakReference wr = new WeakReference(str);
10. //切斷str引用和"Struts2 權威指南"字符串之間的引用
11. str = null;
12. //取出弱引用所引用的對象
13. System.out.println(wr.get());
14. //強制垃圾回收
15. System.gc();
16. System.runFinalization();
17. ///再次取出弱引用所引用的對象
18. System.out.println(wr.get());
19. }
20.}
輸出:
Struts2 權威指南
null