Ответ 1
Что это значит?
Гуава - это долгосрочная замена, и большую часть времени вы должны ее использовать. История состоит в том, что ConcurrentLinkedHashMap вычислил алгоритмы, Guava включил его, а затем сосредоточился на добавлении функций.
Проект concurrentlinkedhashmap, по-видимому, все еще активен.
Это всегда был проект выходных дней, поэтому активный означает, что у меня есть царапины на зуд или ответ на запрос на изменение. Также легче экспериментировать с CLHM, чем с Guava, поэтому я, как правило, доказывал идеи там, прежде чем переносить их. Моя причастность к Гуаве была на 20% больше.
Было ли это одноразовой интеграцией для загрузки пакета кэша Guava?
Да. Сначала мы обновили MapMaker, а затем разделили кеширование на выделенный API. Это односторонняя миграция идей и улучшений в Гуаву.
Разве два проекта эволюционировали независимо с 2010 года?
Оба остались в своих целях. Мотивация ConcurrentLinkedHashMap заключалась в том, чтобы выяснить, как писать подлинный параллельный кеш без быстрых клавиш. Целью Guava является предоставление библиотеки с богатой функциональностью с красивым API и надежной реализацией для широкого использования.
Каковы основные отличия между ними сегодня?
Guava упакован функциями и имеет полную команду в Google, поддерживающую его. Используйте его!
ConcurrentLinkedHashMap имеет более высокий абсолютный concurrency путем украшения вместо forking, ConcurrentHashMap. Это позволяет использовать его с ConcurrentHashMapV8, который основан на новом алгоритме. CLHM не полагается на блокировки сегментов, что повышает производительность записи и позволяет поддерживать одну цепочку LRU. У меня есть экспериментальная ветвь с политикой LIRS, которую я надеюсь когда-нибудь закончить.
В долгосрочной перспективе надеется, что Дуг Ли однажды напишет тайник, вдохновленный нашей работой, и научит нас нескольким вещам в этом процессе.
Обновление (3/15): Caffeine - это перехват Java 8 для кэша Guava. Он пытается обеспечить лучшее из ConcurrentLinkedHashMap и Guava, модернизированное с помощью Java 8, и использовать методы, которые я изучил с тех предыдущих проектов.