☕️ JDK 27 копирует HashMap без повторного вычисления хешей в специальных сценариях
Копирование Map выглядит коротко:
var copy = new HashMap(source);
Но внутри общего пути могут быть итератор, обращения к ключам и значениям, повторный hashCode(). Когда через одну точку вызова проходят разные реализации Map, JIT сложнее убрать эти расходы.
В JDK 27 добавили специальные пути для источника, который является именно HashMap, и неизменяемой обёртки над HashMap. Они обходят исходную таблицу напрямую и используют хеши, уже сохранённые в её узлах.
Оптимизация относится и к putAll(). Для других реализаций Map остаётся общий путь.
🟡 Это не глубокое копирование
Новая таблица по-прежнему содержит ссылки на те же ключи и значения. Изменяемый объект внутри карты не станет независимым после создания копии.
В статье приведены заметные выигрыши микробенчмарков на конкретной платформе. Переносить эти проценты на весь сервис нельзя: сначала проверьте, есть ли копирование карт среди его горячих участков.
🔗 Что ускорили в библиотеках JDK 27
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪