ConcurrentReferenceHashMap
一个Concurrent的HashMap,对键和值使用软引用或弱引用。
在并发访问时支持更好的性能,可用作Collections.synchronizedMap(new WeakHashMap<K,Reference<V>>())的替代品。
此实现遵循与ConcurrentHashMap相同的设计约束,支持null的key或value。
既然可用作Collections.synchronizedMap(new WeakHashMap<K,Reference<V>>())的替代品,就要先介绍一下WeakHashMap。
WeakHashMap
Entry<K,V>[] table; 其Entry继承了WeakReference
private final ReferenceQueue<Object> queue = new ReferenceQueue<>();
在使用put(K,V)时,就会使用K,V,ReferenceQueue等参数构造Entry,因此GC时Entry就会进入queue
在使用get(K)、size() 等方法时,就会触发private void expungeStaleEntries() 使用queue.poll()识别哪些Entry已经被回收,重新整理table达到数据是实时的效果