HashMap com valores fracos
Estou implementando um cache para objetos armazenados persistentemente. A ideia é:
MétodogetObjectFromPersistence(long id); ///Takes about 3 seconds
MétodogetObjectFromCache(long id) //Instantly
E tem um método:getObject(long id)
com o seguinte pseudocódigo:
synchronized(this){
CustomObject result= getObjectFromCache(id)
if (result==null){
result=getObjectFromPersistence(id);
addToCache(result);
}
return result;
}
Mas eu preciso permitir que o CustomObject seja coletado pelo coletor de lixo. Até agora eu estava usando umHashMap<Long,WeakReference<CustomObject>
para a implementação. O problema é que, com o tempo, o HashMap fica cheio de vazioWeakReferences
.
Eu verifiqueiWeakHashMap mas lá as chaves são fracas (e os valores ainda são fortes referências), então ter os longs com WeakReferences não tem sentido.
Qual é a melhor solução para resolver este problema? Existe algum "WeakHashMap inverso" ou algo similar?
obrigado