我正在为持久存储的对象实现缓存。这个想法是:
- 方法
getObjectFromPersistence(long id); ///Takes about 3 seconds
- 方法
getObjectFromCache(long id) //Instantly
并有一个方法:getObject(long id)
使用以下伪代码:
synchronized(this){
CustomObject result= getObjectFromCache(id)
if (result==null){
result=getObjectFromPersistence(id);
addToCache(result);
}
return result;
}
但我需要允许垃圾收集器收集 CustomObject。到目前为止,我一直在使用一个HashMap<Long,WeakReference<CustomObject>
实现。问题是随着时间的推移 HashMap 变得充满了 empty WeakReferences
。
我检查了WeakHashMap但那里的键很弱(并且值仍然是强引用),所以使用 WeakReferences 的 long 没有任何意义。
解决此问题的最佳解决方案是什么?是否有一些“逆 WeakHashMap”或类似的东西?
谢谢