Подтвердить что ты не робот

Как истекает срок действия Guava в CacheBuilder?

Я хочу использовать CacheBuilder, как рекомендуется здесь:

Java-ориентированная карта/кеш с истекающими ключами

Однако я не понимаю, когда Guava знает, что срок действия истекает.

Как это делает Гуава и какова стоимость исполнения?

4b9b3361

Ответ 1

Член команды Guava здесь.

Реализация Guava Cache завершает записи в ходе обычных операций обслуживания, которые происходят в каждом сегменте во время операций записи кеша, а иногда и во время операций чтения кеша. Записи обычно не истек точно с момента их истечения, просто потому, что Cache делает намеренное решение не создавать собственный поток обслуживания, а позволяет пользователю решить, требуется ли непрерывное обслуживание.

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

Когда выполняется обслуживание кеша, все кеширование должно состоять в том, чтобы истечь каждую запись в передней части очереди до тех пор, пока она не найдет незавершенную запись. Это просто и требует относительно небольших накладных расходов, и это происходит в ходе обычного обслуживания кеша. (Кроме того, кеш преднамеренно ограничивает объем работы, выполняемой в одной очистке, сводя к минимуму затраты на любую операцию кеширования.) Обычно затраты на обслуживание кеша преобладают за счет вычисления фактических записей в кеше.