Как бы вы реализовали LRU-кеш в Java?

Пожалуйста, не говорите EHCache или OSCache и т. Д. Предположим, что для целей этого вопроса я хочу реализовать свой собственный, используя только SDK (обучение на практике). Учитывая, что кеш будет использоваться в многопоточной среде, какие структуры данных вы бы использовали? Я уже реализовал один, используяLinkedHashMap а такжеКоллекции # synchronizedMap, но мне любопытно, будут ли какие-либо из новых параллельных коллекций более подходящими кандидатами.

ОБНОВЛЕНИЕ: я только читалПоследний Yegge когда я нашел этот самородок:

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

Я думал почти то же самое, прежде чем я пошел сLinkedHashMap + Collections#synchronizedMap Реализация я упоминал выше. Приятно осознавать, что я что-то не заметил.

Исходя из полученных ответов, похоже, что лучшим вариантом для LRU с высокой степенью конкуренции будет продлениеConcurrentHashMap используя некоторые из той же логики, котораяLinkedHashMap использует.

Ответы на вопрос(21)

Ваш ответ на вопрос