![](https://habrastorage.org/getpro/habr/upload_files/247/1cc/aa9/2471ccaa9f629a15416891d7862a1ed3.png)
Всем привет! ? ? ? ?? Мы — Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
Свежие JEP
JEP 502: Stable Values (Preview) перешел в статус кандидата, пощупать можно в ранних сборках Java 25 с включенным превью. Данный JEP нацелен на ускорение запуска Java-приложений через добавление Stable Values. Их можно расценивать как константы с ленивой инициализацией. Новое API гарантирует иммутабельность созданных объектов, а также их единичность.
![](https://habrastorage.org/getpro/habr/upload_files/b7d/108/735/b7d1087351292cd3dac76e9f96f422f6.png)
Константин Польщиков
После этого JEP вопросы про Singleton на собеседованиях должны стать попроще ?
Пример кода:
class OrderController {
private final StableValue<Logger> logger = StableValue.ofUnset();
Logger getLogger() {
return logger.orElseSet(() -> Logger.create(OrderController.class));
}
void submitOrder(User user, List<Product> products) {
getLogger().info("order started");
...
getLogger().info("order submitted");
}
}
Новые релизы
![](https://habrastorage.org/getpro/habr/upload_files/1f5/641/b2d/1f5641b2df16c31ec050f224c59b56ec.png)
Из важного:
Обогащенный API разбора параметров HTTP-сервера с поддержкой Set<T>.
Больше конвертеров результата Cassandra по умолчанию.
Обработка ошибок ClientClassGenerator при несовпадении пути/параметров.
Инъекция контекста ViolationExceptionHttpServerResponseMapper перед выполнением.
Spring Framework 6.2.2 Available Now. Выпуск содержит исправления ошибок, улучшения документации, обновление зависимостей и новые функции: изменение класса BeanOverrideHandler, который теперь отслеживает только аннотации-квалификаторы, чтобы соответствовать классу QualifierDefinition из Spring Boot. А еще появилось обновление аннотации @MockitoBean, которая теперь поддерживает как поля, так и типы, что согласуется с устаревшей аннотацией @MockBean в Spring Boot. Эта версия будет включена в предстоящие выпуски Spring Boot 3.4.2 и 3.5.0-M1. Более подробную информацию можно найти в примечаниях к выпуску.
![](https://habrastorage.org/getpro/habr/upload_files/74e/8db/f2f/74e8dbf2f86ac2e84187eadc94eed78f.png)
Spring AI. Команда Spring AI MCP выпустила версию 0.5.0 с новыми функциями:
улучшение транспортного уровня с добавлением класса HttpServletSseServerTransport и реализации SseEmitter.SseEventBuilder на основе блокирующей очереди;
новый Bill of Materials (BoM).
Подробнее — в Release Notes.
Quarkus 3.17.7. Шестой технический выпуск (версия 3.17.1 была пропущена из-за регрессии) несет такие изменения:
исправление проблемы с некорректным сопоставлением параметров аннотации @PermissionChecker, если метод аннотирован @PermissionsAllowed с несколькими значениями;
выполнение проверки состояния подключения к MongoDB теперь производится при старте приложения, а не при первой попытке записи данных в базу.
![](https://habrastorage.org/getpro/habr/upload_files/198/f53/bf5/198f53bf543d90bd16086be8ff2c4a97.jpg)
Роман Краснослабодцев
Spring и Quarkus, как всегда, развиваются быстрее, чем я ?
Micrometer. Первый предварительный релиз Micrometer Metrics 1.15.0 несет исправления ошибок, улучшения документации, обновления зависимостей и новые функции:
использование метода failWithActualExpectedAndMessage() из класса AssertJ AbstractAssert, где это возможно;
приведение методов toLowerCase() и toUpperCase() к единому формату с использованием Locale.ROOT для повышения безопасности.
Кроме того, версии Micrometer Metrics 1.14.3 и 1.13.10 содержат обновления зависимостей и исправления:
NullPointerException при применении аспектов к методам, возвращающим CompletableFuture;
регрессия производительности метода remove() в классе MeterRegistry при большом количестве зарегистрированных счетчиков.
Главные новости
Quality Outreach Heads-up — JDK 24: Remote Debugging with jstat and jhsdb Is Deprecated for Removal. OpenJDK Quality Group активно тестирует FOSS-проекты с использованием сборок OpenJDK для повышения качества релизов. Программа открыта для участия.
Java постепенно отказывается от устаревшего Remote Method Interface (RMI), который имеет проблемы с безопасностью и конфигурацией. Современные проекты переходят на более актуальные веб-протоколы. Для локальной отладки и анализа производительности Java предлагает инструменты jstat и jhsdb, которые остаются доступными. Но их удаленные функции, основанные на RMI, устарели и будут удалены. В качестве альтернативы для удаленного мониторинга рекомендуется использовать JDK Flight Recorder (JFR).
Java 24: What’s New? Автор рассказал про JEP, ожидающиеся к релизу в Java 24. По ощущению новый релиз Java содержит много удаленного кода, а также кода, помеченного на удаление. JEP 479 посвящен удалению 32-битных портов WIndows x86, а JEP 501 помечает на удаление порты остальных 32-битных систем. JEP 498 будет генерировать Warning при использовании Unsafe, а JEP 472 будет генерировать Warning при использовании нативных функций. Оба эти предупреждения связаны с появлением Foreign Function and Memory (FFM) API в Java. JEP 486 удаляет Security Manager, который был помечен к удалению еще в Java 17. JEP 490 удаляет non-generational-мод в ZGC.
Amplicode становится платным (и остается бесплатным). Начиная с 15 апреля часть функционала плагина Amplicode становится платной по подписочной модели. При этом базовая поддержка Spring (навигация по бинам, инспекции, автодополнения) остается бесплатной и доступной всем.
![](https://habrastorage.org/getpro/habr/upload_files/73c/85b/8a5/73c85b8a5818a0d0c197e3bff776ba42.png)
The HTTP QUERY Method. В стандарте HTTP должен появиться новый метод — QUERY. Идея простая: при GET-запросах с кучей параметров очень сильно раздувается строка запроса, вплоть до того, что можно упереться в ограничение длины запроса. Многие для решения этой проблемы начинают использовать POST и передавать параметры в теле, что семантически не очень правильно. Для решения этой проблемы вводится новый QUERY-метод. Да, это GET с телом запроса.
![](https://habrastorage.org/getpro/habr/upload_files/f82/7bb/f1c/f827bbf1c8039743163d7659401b03a0.png)
Интересные видео
Doc, JavaDoc and Markdown — Inside Java Podcast JavaDoc остается эталоном качества документации, помогая разработчикам понимать каждую функцию API. В новом эпизоде подкаста Ана беседует с Джонатаном Гиббонсом, ведущим разработчиком JDK tools, о развитии JavaDoc, включая поддержку Markdown и лучшие практики документирования кода. Слушайте выпуск и заглядывайте в подкаст Duke’s Corner на dev.java!
Java Performance Update. Если вы интересуетесь производительностью Java и хотите узнать, как последние обновления JDK могут ускорить ваши приложения, это видео — must watch! В докладе подробно разбираются пять ключевых улучшений в JDK, включая оптимизации в стандартных библиотеках, JIT-компиляторе и сборщиках мусора.
Особое внимание уделяют новой функции JIT-компилятора — MergeStore, которая объединяет несколько операций записи в массив в одну, что может значительно повысить производительность. Вы узнаете, как избежать типичных ошибок, которые могут помешать использованию этой функции. Рекомендую это видео всем, кто хочет глубже понять, как современные оптимизации Java могут помочь в разработке высокопроизводительных приложений.
Java's Plans for 2025 — Inside Java Newscast #83. В этом видео представлены планы по всем основным проектам: Babylon, Loom, Leyden, Lilliput, Panama и Valhalla. И да, в списке нет проекта Amber. Просто разработчики настолько продуктивны, что для обзора готовящихся фич потребовался отдельный выпуск ? В целом же год обещает быть интересным: активное развитие в области ML и работы с GPU, улучшение виртуальных тредов, больше AOT‑фич и, конечно, проект Valhalla, который выйдет в…
Java Language Evolution in 2025 — Inside Java Newscast #84. Выпуск о готовящихся фичах проекта Amber. Помимо фич, о которых мы уже хорошо знаем (вроде гибких тел конструкторов, упрощенного Main и импорта модулей), нам анонсировали много интересного. Например, деконструкция на переменные будет доступна не только для record, но и для всех классов. Для этого в них нужно будет явно определить деконструктор. Помимо этого, готовится Сериализация 2.0, Stable Values, и да, над String Template продолжат работать ?
A Deep Dive into JVM Start-Up «Перед тем как сказать „Hello, World!“, вам нужно создать вселенную» — эта цитата прекрасно описывает весь выпуск. Автор очень понятно, просто и наглядно рассказал о том, как инициализируется новый инстанс JVM (конкретно HotSpot). Основной упор — на механизм загрузки классов. Вы узнаете, в каком порядке происходит инициализация, верификакция, связывание и решение классов. И что происходит на каждом этапе. Очень полезный выпуск для понимания базы JVM. А еще есть текстовая расшифровка видео.
Валерий Торопов — Spring Data Redis как неудачное решение. Доклад очень хорошо раскрывает подводные (можно даже сказать, подабстрактные) камни Spring Data Redis. По сути, это отличная демонстрация того, что фреймворк — хрестоматийной пример натягивания совы на глобус протекающей абстракции. Неочевидного поведения очень много. Чего стоит только тот факт, что deleteBy не удаляет данные. Автору неиронично большое спасибо, что подсветил эти проблемы. Информация дана четко и структурированно, никакой воды.
![](https://habrastorage.org/getpro/habr/upload_files/6f6/745/836/6f67458366fdccee0563b2e751137bbd.png)
Антон Курако — Цена докторской степени по Spring В докладе Антон рассматривает известные проблемы Spring: сложность конфигурации, неочевидное поведение в рантайме, медленный запуск, неудобство отладки, огромное количество легаси и так далее. Попутно рассказывая о том, какие подходы применяются в Kora, чтобы решить соответствующие боли разработчиков. Критика Spring в докладе справедлива и оправданна, но все же нужно понимать две важные вещи про Kora.
Первая: Kora все еще молодой фреймворк, который не успел стать громоздким. В этом контексте будет очень интересно когда-нибудь послушать видение Антона о будущем инструмента.
Второе: Kora работает на кодогенерации, что само по себе решает много проблем. И тут очень интересно было бы увидеть более детальное сравнение с прямым аналогом — фреймворком Micronaut.
Вадим Бубликов — Разрабатываем модульный бэкенд, используя стандартные возможности Spring Boot. В докладе рассказывается о том, в каких случаях строить монолит (но не обычный, а модульный!) — действительно хорошее решение. Автор погружается в то, как, по его мнению, лучше всего готовить модульный монолит и выстраивать взаимодействие между его модулями. Все это — используя стандартные возможности Spring Boot.
Полезные статьи
JVM Tuning with Machine Learning on Garbage Collection Logs Исследование Oracle, Uppsala University и KTH показало, что машинное обучение может эффективно автонастраивать JVM. В своем блоге Ягмур, выпускница KTH, рассказывает, как с помощью ML-моделей удалось увеличить пропускную способность Java-приложений на 20% за счет оптимизации флагов JVM на основе логов GC.
Using Buddy Allocators to Reduce Inter-Page Fragmentation in ZGC Каспер, выпускник Uppsala University, в рамках магистерской работы изучил возможность интеграции buddy-аллокатора в ZGC для снижения фрагментации памяти. Его исследование показало, что адаптация таких аллокаторов помогает повторно использовать свободные области без необходимости сброса страниц, улучшая распределение памяти. Результаты подтвердили эффективность подхода, но еще выявили структурные ограничения buddy-аллокаторов, такие как неизбежные потери памяти из-за округления размеров блоков. Дальнейшие исследования могут сосредоточиться на гибридных стратегиях и интеграции с проектом Lilliput.
How JVM handles exceptions | Nataliia Dziubenko Небольшая, но очень интересная статья о том, как в JVM реализована обработка исключений на уровне байткода.
JDBC Fetch Size: Маленькая настройка, большие последствия Статья о важной настройке JDBC-драйвера — fetch size — и о том, как она влияет на производительность. Разбирается он на примере JDBC-драйвера для Oracle, где по дефолту она равна 10, что очень часто провоцирует лишние обращения к БД.
The Java Streams Parallel Статья о том, как работает параллелизм в Java Streams на версии JDK 24. Автор рассмотрел отличие data-параллелизма от task-параллелизма, жизненный цикл стримов, а также флаги, которые помогают параллелить задачи. В статье есть таблица, описывающая, как связаны флаги, использование памяти и операции стримов. А еще есть интерактивная версия таблицы, позволяющая посмотреть, как поведет себя стрим при различных последовательностях операций — как при включенной параллельности, так и без нее.
Spring AI has added support for DeepSeek AI Небольшая статья о том, как использовать Deep Seek в Spring AI. Забавно получилось, что можно использовать интеграцию с Opena API для работы с китайским собратом.
Просто интересное
Заговор разработчиков против корпораций
В этой обличительной статье автор раскрывает методы работы техно-анархистов, которые прямо сейчас портят десятки, если не сотни тысяч кодовых баз по всему миру! Они точно знают, как писать код так, чтобы он был максимально неочевиден и сложен для поддержки. И поверьте, их методы не ограничиваются просто плохими именами переменных и созданием классов на 100500 строк кода. Они куда хитрее и изощреннее, чем вы можете себе представить. Наша редакция призывает каждого уважающего себя инженера прочесть эту статью и распространить среди своих коллег. Ведь предупрежден - значит вооружен. Пожелаем автору удачи, ведь обещает еще две статьи - про порчу архитектуры и коллектива. Ждем и верим!
![](https://habrastorage.org/getpro/habr/upload_files/cde/642/29d/cde64229ddf0dad3fe38bd66928b5ec5.png)
Книга Quarkus In Action доступна бесплатно в электронном виде
Спасибо за прочтение! Ждём вашу обратную связь в комментариях. Увидимся через месяц ?
Присылайте материалы, если встретили что-то интересное - опубликуем в следующем выпуске!