Java提供了 java.lang.ref包,該包下的類均與垃圾回收機制相關 先介紹Java對象的集中引用類型 1.強引用 強引用是最常見的,創建對象就是強引用,如 String a = new String("1"); 無論系統記憶體是否緊張,只要該對象還存在強引用就不會被垃圾回收機制回收 2.軟引 ...
Java提供了 java.lang.ref包,該包下的類均與垃圾回收機制相關
先介紹Java對象的集中引用類型
1.強引用
強引用是最常見的,創建對象就是強引用,如 String a = new String("1");
無論系統記憶體是否緊張,只要該對象還存在強引用就不會被垃圾回收機制回收
2.軟引用
當系統記憶體足夠時,不會被回收,當系統記憶體不足時,會將其回收
3.弱引用
當垃圾回收機制運行時,總會將其回收
4.虛引用
跟蹤對象被垃圾回收的狀態
通過檢查與虛引用關聯的引用隊列中是否已經包含指定的虛引用,從而瞭解虛引用所引用的對象是否即將被回收
再介紹引用相關的類
- SoftReference<T>: 軟引用類型,示例如下,
// 創建軟引用類型
SoftReference<String> sr = new SoftReference<String>(new String("Hello"));
// 返回對象引用
String string = sr.get();
if(string == null){
// 因為軟引用當系統記憶體緊張時會被回收,所以使用的時候需要判斷是否為null
}
// 創建數組
SoftReference<String>[] srs = new SoftReference[100];
2.WeakReference<T>: 弱引用類型,示例如下
// 創建弱引用類型, 不能使用"Hello",這樣系統會緩存這個字元串直接量,使用強引用來引用它
WeakReference<String> wr = new WeakReference<>( new String("Hello"));
// 調用弱引用
String str = wr.get();
// 因為軟引用當運行垃圾回收時會被回收,所以使用的時候需要判斷是否為null
if(str == null){}
// 強制垃圾回收
System.gc();
// 再次調用弱應用,發現已經為null
System.out.println(wr.get());
3.WeakHashMap<K,V>: 弱引用類型的Map,這個類是 java.util 包下的
當垃圾回收機制運行時,會清空所有key-value對,除非某些key還有強引用在引用它
4.PhantomReference<T>: 虛引用類型,類似於沒有引用,要和引用隊列聯合使用
感覺不怎麼用的到,就不舉例子了,感興趣自己查一下
5.ReferenceQueue<T>: 引用隊列,用於保存被回收後對象的引用