HashMap con valores débiles

Estoy implementando un caché para objetos almacenados de forma persistente. La idea es:

MétodogetObjectFromPersistence(long id); ///Takes about 3 secondsMétodogetObjectFromCache(long id) //Instantly

Y tiene un método:getObject(long id) con el siguiente pseudocódigo:

synchronized(this){
    CustomObject result= getObjectFromCache(id)
    if (result==null){
       result=getObjectFromPersistence(id);
       addToCache(result);
    }
    return result;
}

Pero necesito permitir que el recolector de basura recoja el CustomObject. Hasta ahora estaba usando unHashMap<Long,WeakReference<CustomObject> para la implementación. El problema es que con el tiempo el HashMap se llena de vacíoWeakReferences.

He comprobadoMapa débil pero allí las claves son débiles (y los valores siguen siendo referencias fuertes), por lo que tener los largos con WeakReferences no tiene sentido.

¿Cuál es la mejor solución para resolver este problema? ¿Hay algún "WeakHashMap inverso" o algo similar?

Gracias

Respuestas a la pregunta(7)

Su respuesta a la pregunta