2012-01-12 24 views
9
  1. ehcache 2,5
  2. timeToIdleSeconds = "1800" (30 minutos), por lo que espero elemento para desalojar después de 30 minutos de inactividad
  3. 30 minutos después de la última de Uso del Elemento todavía puedo ver que la memoria caché está llena de elementos
  4. Forzar GC y que tienen programas de descarga del montón, que los elementos se encuentran todavía en la memoria
  5. getSize() devuelve el número y GetKeys positivo() devuelve las llaves como se esperaba (GetKeys() hace no verificar el vencimiento de los elementos)
  6. obteniendo un elemento particular, aunque da como resultado un valor NULO, lo que significa que ha caducado.
  7. getKeysWithExpiryCheck() muestra, que la memoria caché está vacío y todo elemento exired y desalojado
  8. Forzar GC y teniendo shows volcado del montón, que los elementos recogieron fuera de la memoria.ehcache no elimina Elemento de la memoria sobre el desalojo

    maxEntriesLocalHeap="10000" 
    eternal="false" 
    statistics="true" 
    overflowToDisk="false" 
    timeToIdleSeconds="1800" 
    memoryStoreEvictionPolicy="LFU" 
    transactionalMode="off" 
    

Desde arriba veo, que Ehcache hacer impresión, que los elementos se cumplan lo que puede conducir mi lógica de código para refrescar ellos, pero bajo la memoria de campana es hasta contaminados con elementos hasta que llamo elemento o getKeysWithExpiryCheck particular,(), que no me deja usar ehcache como un administrador de memoria efectivo

¿Cómo hacer que el elemento sea GS después del tiempoToIdleSeconds time? Quiero que la memoria se limpie si los elementos no se usan por encima de timeToIdleSeconds.

Michael

Respuesta

18

Ehcache sólo se desaloje elementos a la hora de poner los elementos y la memoria caché es superior al umbral. De lo contrario, el acceso a los elementos caducados dará como resultado que caduquen (y se eliminen de la memoria caché). No hay ningún hilo que recolecte y elimina los elementos caducados de la memoria caché en el fondo. Aunque no lo recomendaría, ya que esto afectará el rendimiento del caché (pero si el uso de la memoria es más importante, esto podría ser una compensación justa), puede tener un hilo de fondo haciendo el getKeysWithExpiryCheck() en un intervalo regular.

Además, si el consumo de memoria es un punto importante, es posible que desee ver en la nueva Ehcache 2.5, que le permite (incluso a nivel CacheManager) especificar hasta la cantidad de montón se debe utilizar ...

Cuestiones relacionadas