Я реализую кеш для сохраняемых объектов. Идея такова:
- Метод
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 заполняется пустым WeakReferences
.
Я проверил WeakHashMap, но там ключи слабы (и значения по-прежнему являются сильными ссылками), поэтому с longs с WeakReferences не имеют смысла.
Какое лучшее решение для решения этой проблемы? Есть ли какая-нибудь "обратная WeakHashMap" или что-то подобное?
Спасибо