Quiero crear un LinkedHashMap que limitará su tamaño en función de la memoria disponible (es decir, cuando freeMemory + (maxMemory - allocatedMemory)
se encuentre por debajo de un determinado umbral). Esto se usará como una forma de caché, probablemente utilizando el "uso menos reciente" como estrategia de almacenamiento en caché.LRU LinkedHashMap que limita el tamaño según la memoria disponible
Mi preocupación es que la memoria asignada también incluye (supongo) los datos recolectados sin basura, y así sobreestimar la cantidad de memoria utilizada. Me preocupan las consecuencias involuntarias que esto podría tener.
Por ejemplo, LinkedHashMap puede seguir eliminando elementos porque cree que no hay suficiente memoria libre, pero la memoria libre no aumenta porque estos elementos eliminados no se recogen de forma inmediata.
¿Alguien tiene alguna experiencia con este tipo de cosas? ¿Está justificada mi preocupación? Si es así, ¿alguien puede sugerir un buen enfoque?
Debo agregar que también quiero ser capaz de "bloquear" la memoria caché, básicamente diciendo "ok, a partir de ahora no elimine nada debido a problemas de uso de memoria".
¿Cuál es su aplicación aquí? Es difícil encontrar una buena respuesta sin una idea de cuál es la intención de fondo. ¿Es su HashMap un caché o qué? – jprete
jprete, traté de aclarar esto, tiene razón, es un caché – sanity
Este es un ejemplo típico de cómo GC y la administración de la memoria Java muestran su cara realmente desordenada. Sería * tan simple * hacer tal cosa en C++. Usando GC, no puedes ejecutar comandos como eliminar o liberar. –