Spring ConcurrentReferenceHashMap簡單測試

Spring ConcurrentReferenceHashMap簡單測試

ConcurrentReferenceHashMap是自spring3.2後增加的一個同步的軟(虛)引用Map。關於軟引用(SoftRefrence)和虛引用(WeakRefrence)可以參見java四種引用類型。廢話不多說直接上測試代碼:

@Test
public void test() throws InterruptedException {
    String key = new String("key");
    String value = new String("val");
    Map<String, String> map = new ConcurrentReferenceHashMap<>(8, ReferenceType.WEAK);
    map.put(key, value);
    System.out.println(map);
    key = null;
    System.gc();
    TimeUnit.SECONDS.sleep(5);
    System.out.println(map);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

輸出結果: 
這裏寫圖片描述


神奇的事發生了。通過代碼我們可以看到。我先構建了一個虛引用的map對象(也就是本文主角ConcurrentReferenceHashMap),然後新建對象key,value並將兩個對象放入Map中進行保存。然後使key對象的強引用置爲null。然後調用系統GC。由於系統GC的特殊性質並不能保證系統立馬進行GC操作所已緊接着讓主線程睡眠5s。接着打印我們的map對象發現map中的對象自動被移除了。 
接下來我不置空key而將value置空發現結果相同。 
結論: 
查看ConcurrentReferenceHashMap源碼發現起底層實現依賴的是RefrenceQueue完成自動移除操作。時間有限就寫到這裏。有時間再進行完善。

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章