Используете ли Google-коллекции MapMaker? - PullRequest
8 голосов
/ 17 сентября 2010

Я только что наткнулся на этот ответ в SO , где упоминается, что Google-collection MapMaker - это круто. Я просмотрел документацию, но не смог выяснить, где яМожно использовать любой. Укажите любой сценарий, в котором было бы целесообразно использовать MapMaker.

Ответы [ 2 ]

12 голосов
/ 17 сентября 2010

Вот краткий пример того, как я использовал MapMaker:

private final ConcurrentMap<Long, Foo> fooCache = new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Long, Foo>() {
          public Foo apply(Long id) {
            return getFooFromServer(id);
          }
        });

 public Foo getFoo(Long id) {
   return fooCache.get(id);
 }

Когда на карте вызывается get(id), он либо возвращает Foo, который находится всопоставьте этот идентификатор, или он будет извлекать его с сервера, кэшировать и возвращать.Я не должен думать об этом, как только это настроено.Кроме того, поскольку я установил softValues(), кэш не может заполняться и вызывать проблемы с памятью, поскольку система способна очищать записи из него в ответ на потребности в памяти.Если кэшированное значение удаляется с карты, оно может просто запросить его у сервера в следующий раз, когда оно понадобится!

Дело в том, что это только один из способов его использования.Возможность использовать для карты сильные, слабые или программные клавиши и / или значения, а также возможность удалять записи через определенный промежуток времени, позволяет с ней многое сделать.

3 голосов
/ 17 сентября 2010

Может помочь, если вы посмотрите на описания SoftReference и WeakReference.

SoftReference очень полезен для использования в кешах, так как они будут специально очищаться при нехватке памяти.

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

Итак, рассмотрите возможность использования MapMaker для создания ConcurrentMap с softValues ​​для кеша и со слабыми ключами для таблиц временного просмотра.

Редактировать: softValues ​​использует политику LRU.

...