Spring ConcurrentReferenceHashMap简单测试

来源:互联网 发布:js实现word预览 编辑:程序博客网 时间:2024/06/06 03:03

Spring ConcurrentReferenceHashMap简单测试

ConcurrentReferenceHashMap是自spring3.2后增加的一个同步的软(虚)引用Map。关于软引用(SoftRefrence)和虚引用(WeakRefrence)可以参见java四种引用类型。废话不多说直接上测试代码:

@Testpublic 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完成自动移除操作。时间有限就写到这里。有时间再进行完善。

0 0
原创粉丝点击