Google Guava Cache на слабой ссылке не дает уведомления о выселении

Я использовал Google Guava в нашем приложении на основе слабых значений, как показано ниже.

CacheBuilder
            .newBuilder()
            .weakValues()
            .concurrencyLevel(Runtime.getRuntime().availableProcessors())
            .removalListener(removalListener)
            .build(cacheLoader);

Слушатель удаления не вызывается сразу после удаления слабого значения кэша. Я должен очистить собственный ресурс, основываясь на этом, и, таким образом, моя программа заканчивается без освобождения памяти в исходном конце. Это известная проблема?

2 ответа

В Google Guava Docs говорится следующее:

Кэши, созданные с помощью CacheBuilder, не выполняют очистку и высвобождают значения "автоматически", или сразу после истечения срока действия, или чего-либо подобного. Вместо этого он выполняет небольшие объемы обслуживания во время операций записи или во время периодических операций чтения, если записи выполняются редко.

Также объясняется, почему они приняли это решение и какие есть альтернативы.

Я не думаю, что слушатель будет вызван, если JVM GC заявит о слабости. этот слушатель должен работать только тогда, когда политика выселения вызывает выселение. например, expireAfterWriter() или expireAfterAccess()

Другие вопросы по тегам