標籤:不能 queue 存在 void ant 16px weak http weakref
一、目錄
1、引用分類
2、瞭解WeakHashMap、IdentityHashMap、EnumMap
3、同步控制與唯讀設定
二、代碼實現
1、引用分類(面試)
強引用(StrongReference):引用指向對象,gc運行時,不回收。
弱引用(SoftReference):gc運行時可能回收(當jvm記憶體不足時)。
軟引用(WeakReference):當gc運行時,對象回收。
虛引用(phantomReference):類似於無銀用,主要跟蹤對象被回收的對象,不能單獨使用,要與ReferenceQueue聯合使用
目的:避免對象長期駐留在記憶體中,解決記憶體回收機制時機問題。
2、WeakHashMap(鍵若引用,回收後自動刪除key-value對象)
public static void main(String [] args){ //結果:map的size為2,new String()為軟對象被回收 WeakHashMap weakHashMap=new WeakHashMap(); //“key1”、“key2”存在於常量池為強對象不會被回收 weakHashMap.put("key1","hello"); weakHashMap.put("key2","hello2"); weakHashMap.put(new String("key3"),"hello3"); System.gc(); System.runFinalization(); System.out.println(weakHashMap.size()); }
3、同步控制與唯讀操作
(1)同步控制
因為容器中有一些是安全執行緒,有一些是線程不安全,那麼怎麼把線程不安全的容器也調整成安全執行緒呢?
如:Hashtale(安全)-HashMap(不安全) ArryList-LinkedList(不安全)-Vector(安全)
(2)唯讀操作
1)空的不可變的集合
2)一個元素不可變的集合
3)不可變容器
Java容器-引用分類與部分Map用法