[Перевод] Перевополщение Stable Values в JDK 26
В новом переводе от команды Spring АйО рассмотрим ленивую инициализацию в Java , которая почти всегда значит: поле сначала null , потом double-checked locking, volatile, синхронизация. Ошибиться легко, а final не поставить. Итог - код хрупче и JVM хуже делает constant folding. В JDK 26 (preview, JEP 526) добавили LazyConstant<T> : final поле, рецепт вычисления через Supplier , значение берёте login.get() . Supplier выполнится при первом get и только один раз успешно, даже при гонке потоков. Кроме этого значение помечается как @Stable - JVM может считать его константой и агрессивнее оптимизировать. Граничные случаи: null нельзя; не сериализуется; исключение из Supplier пробросится и следующая попытка снова пересчитает; equals у LazyConstant - только identity. Для 1:n есть List.ofLazy и Map.ofLazy : элементы/значения считаются по индексу/ключу по требованию и кэшируются.
https://habr.com/ru/companies/spring_aio/articles/1042294/
#java #kotlin #jdk #jdk_26 #perf #performance #performance_optimization









