ehcache не удаляет элемент из памяти при выселении - PullRequest
9 голосов
/ 12 января 2012
  1. ehcache 2.5
  2. timeToIdleSeconds = "1800" (30 минут), поэтому я ожидаю, что элемент выселится через 30 минут простоя
  3. 30 минут после последнего использования элемента Я все ещеможет видеть, что кэш полон элементов
  4. Формирование GC и получение дампа кучи показывает, что элементы все еще находятся в памяти
  5. getSize () возвращает положительное число, а getKeys () возвращает ключи, как и ожидалось (getKeys () не проверяет срок действия элементов)
  6. получение определенного элемента, хотя приводит к значению NULL, означающему, что он истек.
  7. getKeysWithExpiryCheck () показывает, что кэш пуст и весь элемент истеки выселенный
  8. Принудительный сбор мусора и получение дампа кучи показывает, что элементы собраны из памяти.

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

Сверху я вижу, что ehcache производит впечатлениесрок действия этих элементов истек, что может привести к тому, что моя логика кода обновит их, но внутренняя память остается загрязненной элементами, пока я не вызову конкретный элемент или getKeysWithExpiryCheck (), который не позволяет мне использовать ehcache в качестве эффективного менеджера памяти

Как сделать элемент элементом GS по истечении времени timeToIdleSeconds?Я хочу очистить память, если элементы не используются выше timeToIdleSeconds.

Michael

1 Ответ

20 голосов
/ 13 января 2012

Ehcache будет выселять элементы только при помещении элементов, и ваш кеш превышает пороговое значение.В противном случае доступ к этим просроченным элементам приведет к истечению срока их действия (и удалению из кэша).Нет потока, который собирает и удаляет просроченные элементы из кэша в фоновом режиме.Даже если бы я не рекомендовал это, так как это повлияет на производительность Cache (но если использование памяти более важно, это может быть справедливым компромиссом), вы можете иметь фоновый поток, выполняющий getKeysWithExpiryCheck () через регулярный интервал.

Также, если потребление памяти является основным моментом, вы можете захотеть взглянуть на новый Ehcache 2.5, который позволяет вам (даже на уровне CacheManager) указывать, сколько кучи следует использовать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...