Кэши Guava учитывают вес при выборе выселения? - PullRequest
7 голосов
/ 29 марта 2012

Последняя версия превосходной библиотеки Guava обновила API кэширования.CacheBuilder теперь имеет метод maxmimumWeight () для обеспечения максимального веса над кешем.Состояния javadoc:

Указывает максимальный вес записей, которые может содержать кэш.Вес определяется с помощью весов, указанных с помощью весов, и для использования этого метода требуется соответствующий вызов весовщику перед вызовом build (com.google.common.cache.CacheLoader).

Обратите внимание, что кэш может удалитьвход до превышения этого лимита.Поскольку размер кеша приближается к максимальному, кеш удаляет записи, которые с меньшей вероятностью будут использоваться снова.Например, кэш может исключить запись, потому что она не использовалась в последнее время или очень часто.

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

1 Ответ

13 голосов
/ 29 марта 2012

Член команды гуавы здесь.

Поскольку размер кеша приближается к максимальному, кеш исключает записи, которые с меньшей вероятностью будут использоваться снова. Например, кэш может удалить запись, потому что она не использовалась в последнее время или очень часто.

Если кеш имеет другое поведение, он не документируется (и на него не следует полагаться). Тем не менее, текущая реализация только заботится о самом последнем доступе, если вы посмотрите на источник :

while (totalWeight > maxSegmentWeight) {
  ReferenceEntry<K, V> e = getNextEvictable();
  if (!removeEntry(e, e.getHash(), RemovalCause.SIZE)) {
    throw new AssertionError();
  }
}

и getNextEvictable повторяются в порядке наименьшего числа обращений.

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