我正在为持久存储的对象实现一个缓存。思路如下:
getObjectFromPersistence(long id); ///需要约3秒
getObjectFromCache(long id) //立即返回
并且有一个方法:getObject(long id)
,其伪代码如下:
synchronized(this){
CustomObject result= getObjectFromCache(id)
if (result==null){
result=getObjectFromPersistence(id);
addToCache(result);
}
return result;
}
但是我需要让Garbage Collector回收CustomObject。到目前为止,我使用了一个HashMap<Long,WeakReference<CustomObject>
进行实现。问题是随着时间的推移,HashMap变得充满了空的WeakReferences
。
我已经检查过WeakHashMap,但那里的键是弱引用(而值仍然是强引用),所以用WeakReferences作为长整型没有意义。
有什么最好的解决方案来解决这个问题吗?是否有某种“反向WeakHashMap”或类似的东西?
谢谢