Использование коллекций Google MapMaker?

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

Ответ 1

Вот пример, который я использовал 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(), кеш не может заполнить и вызвать проблемы с памятью, так как система может очищать записи от него в ответ на потребности памяти. Если кешированное значение очищается от карты, однако, он может просто попросить сервер для него снова в следующий раз, когда он вам понадобится!

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

Ответ 2

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

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

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

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

Изменить: softValues ​​использует политику LRU.