2012-04-13 3 views

ответ

45

Guava команда участник здесь.

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

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

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

+0

+1 ... Большое спасибо за объяснение и большое спасибо за Гуаву. Связанный список «трюк» очень аккуратный! Я устанавливаю Guava сразу: благодаря вашему подробному ответу, теперь я продаюсь на Guava:) –

+3

Чарльз Фрай отлично выступил с презентацией о MapMaker/CacheBuilder в Strange Loop. Разговор доступен [в InfoQ] (http://www.infoq.com/presentations/Concurrent-Caching-at-Google) –

+0

будет использовать Datastructure, кроме LinkedList, каким-то образом поможет улучшить процесс выселения? – asgs

Смежные вопросы