具有软引用值的HashMap实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有软引用值的HashMap实现相关的知识,希望对你有一定的参考价值。
我想要一个带有键映射到相当大的对象的Map。由于地图将用作缓存,我想通过软链接(java.lang.ref.SoftReference
)引用值/条目以在纯内存上清除它。但在这种情况下,我需要有自己的computeIfAbsent()
方法实现。
我可以通过以下方式实现它:
Map<Integer, SoftReference<T>> myMap = new HashMap<>();
public T get(Integer key) {
SoftReference<T> value = myMap.get(key);
if (value == null || value.get() == null) {
value = new SoftReference(retrieveValue());
myMap.put(key, value);
}
return value.get();
}
只是想知道,这样的地图有没有开箱即用的解决方案,比如java.util.WeakHashMap
?
谢谢!
答案
是的,Guava的CacheBuilder支持SoftReference和WeakReference值,以及基于大小和时间的其他驱逐策略。您可以直接使用缓存,也可以将其视为地图:
ConcurrentMap<Integer, V> map = CacheBuilder.newBuilder()
.softValues()
.build()
.asMap()
以上是关于具有软引用值的HashMap实现的主要内容,如果未能解决你的问题,请参考以下文章