具有软引用值的 HashMap 实现

我想要一个映射到相当大对象的键映射。由于地图将用作缓存,因此我希望通过软链接 ( 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?


月关宝盒
浏览 91回答 1
1回答

繁星点点滴滴

是的,Guava 的CacheBuilder支持 SoftReference 和 WeakReference 值,以及其他基于大小和时间的驱逐策略。您可以直接使用缓存,也可以将其作为地图查看:ConcurrentMap<Integer,&nbsp;V>&nbsp;map&nbsp;=&nbsp;CacheBuilder.newBuilder() &nbsp;&nbsp;&nbsp;.softValues() &nbsp;&nbsp;&nbsp;.build() &nbsp;&nbsp;&nbsp;.asMap()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java