
Всем привет! 👋👋👋👋👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Константин, Константин и Роман. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
В этом выпуске будет много релизов, один из них — новый майлстоун Spring 7.0.0, а еще — новые версии Quarkus и Kora. Снова узнаем, как сделать Spring быстрее, вспомним старые хорошие доклады в новом формате и посмотрим на фичи Java 24 на примере крестиков-ноликов.
Главные новости
18 марта 2025 года компания Oracle официально выпустила Java 24 — Oracle JDK 24. Релиз следует регулярному полугодичному циклу обновлений Java: они выходят в марте и сентябре каждого года. Это радостное событие мы подробно осветили в спецвыпуске:
Горячие JEPы
JEP draft: JFR Method Timing & Tracing. В JDK собираются добавить возможность отслеживать время выполнения методов и стек-вызов при вызове метода. Посмотреть это можно будет с помощью JFR.view-команды jcmd.
Для реализации добавят два новых события: jdk.MethodTrace и jdk.MethodTiming. Можно будет задавать фильтры для выбора методов или указать класс, тогда проверять будут все методы класса. В качестве фильтра можно указать созданную вами аннотацию, тогда проверят все методы с этой аннотацией.
JEP draft: Prepare to Make Final Mean Final. Многие могли видеть прекрасный пример, как с помощью рефлексии можно модифицировать final-поля. Java начала понемногу двигаться в сторону того, чтобы по стандарту отключить эту возможность.
Из Java 24 удалили Unsafe, а теперь собираются запретить модификацию final. Функциональность будет выключена по умолчанию, но ее можно будет включить флагом. Сейчас идет этап подготовки, и в этом JEP предлагают пока только кидать предупреждения о модификации final-полей.

Свежие релизы
Spring Framework v7.0.0-M3. Из интересного, что уже успело появиться: новый вариант программной регистрации бинов через BeanRegistrar, использование Class-file API для JDK 24+, поддержка версионирования API и окончание поддержки Java EE аннотаций, таких как @Resource и @Inject.
______________________________________________________________________________
Eclipse JNoSQL 1.1.6, совместимый с Jakarta NoSQL и Jakarta Data. Релиз содержит исправление ошибок, улучшения производительности и новые функции:
новый интерфейс GraphTemplate, поддерживающий графовые БД;
усовершенствование CDI Lite для повышения производительности.
Более подробную информацию об этом выпуске можно найти в примечаниях к выпуску.
______________________________________________________________________________
IBM выпустила версию Open Liberty 25.0.0.3 с набором новых функций: возможностью настраивать общую библиотеку с помощью нового элемента конфигурации path, который дополняет существующие элементы конфигурации file, folder и fileset в XML-файле, а также соответствием FIPS 140-3, требованиям безопасности для криптографических модулей, для IBM SDK, Java Technology Edition 8.
______________________________________________________________________________
Вышли версии Quarkus 3.21.0 и 3.20.0 и принесли исправление ошибок, обновления зависимостей и новые функции:
поддержку расширения MongoDB Client в реестре TLS;
включение интерфейса ClientRequestFilter для работы в том же контексте Vert.x, что и другие обработчики, для решения проблемы распространения контекста с блокировкой REST-клиентов.
Более подробную информацию можно найти в примечаниях к выпуску.
______________________________________________________________________________
Первая бета-версия WildFly 36.0.0 содержит крупные исправления, обновления зависимостей и улучшения:
параметр jboss.as.jpa.classtransformer теперь включен по умолчанию для повышения производительности;
появляется предупреждение, если включено более одной системы метрик.
Более подробную информацию об этом выпуске можно найти в примечаниях к выпуску.
______________________________________________________________________________
Третий альфа-релиз Hibernate Search 8.0.0 представлен с соответствием Hibernate ORM 7.0.0.Beta5, которое реализует спецификацию Jakarta Persistence 3.2. Для замены устаревшего метода getJandexView(), определенного в интерфейсе BootstrapContext, появилась миграция на интерфейс Hibernate Models ClassDetailsRegistry, основанный на индексе Jandex. Дополнительные сведения об этом можно найти в примечаниях к выпуску.
______________________________________________________________________________
Сборка 25-loom+1-11 появилась в раннем доступе для Project Loom. Она основана на jdk-25+13. Билд улучшает реализацию мониторов в Java (синхронизированных методов) для улучшенной совместимости с виртуальными потоками.
______________________________________________________________________________
Kora 1.1.23. C последнего нашего дайджеста разработчики Kora успели выкатить аж три новых релиза. В основном небольшие полезные фиксы, но есть и на что посмотреть. Добавлены:
метод записи в отформатированную строку в JsonWriter;
опции конфигурации maxConnectionAge и maxConnectionAgeGrace для gRPC-сервера;
поддержка сигнатуры Cache<K, Optional<T>> в кэшах в Java;
поддержка Record/Data-классов в качестве самопараметра в базах данных;
поддержка nullable и/или non required параметра OpenAPI additionalProperties;
парсинг BigDecimal с использованием JsonReader<BigDecimal> из контейнера зависимостей, а не статической функции;
оптимизированный доступ к получению HTTP-серверных параметров и заголовков;
оптимизированный Cassandra-обработчик List<T> для пустых значений;
усиленная проверка конфигурации CircuitBreaker на старте;
логирование медленно инициализируемых узлов в контейнере зависимостей.
Интересные видео
Java 24 Release Notes Overview for Operations Обзор изменений и улучшений в JDK 24, включая новые функции, такие как расширение Light Berry для G1 (JEP 475), улучшения времени запуска приложений с помощью AOT (JEP 483), удаление 32-разрядных портов для Windows и Linux.
Рассматриваются улучшения в Jartools и JMX, удаление устаревших функций, новые механизмы для улучшения производительности и упрощения работы с виртуальными потоками. Видео полезно для разработчиков, интересующихся последними изменениями в JDK.
Stable Values in Java 25 - Inside Java Newscast #88 Выпуск посвящен JEP 502, который войдет в Java 25 в статусе preview. Этот джеп вводит новый API, предназначенный для lazy-инициализации константных значений. В видео раскрывается мотивация введения этого API и дается обзор его возможностей.

Костя Максимов
Очень перспективная фича. Она будет крайне полезна как enterprise-разработчикам, так и авторам фреймворков и библиотек вроде Spring и Hibernate. API дает много возможностей и при этом интуитивен. Эта фича по влиянию вполне может быть сопоставима с Optional.
Полезные статьи
Educating and Nurturing the Next Generation of Java Developers. Java продолжает оставаться ведущим языком программирования в мире, активно используемым в крупнейших компаниях. Oracle стремится поддерживать этот статус, инвестируя в обучение и развитие будущих Java-разработчиков. Они вводят новые инструменты и ресурсы, чтобы помочь новичкам изучать язык. А еще продолжают сотрудничество с College Board для обновления материалов по курсу AP Computer Science (CSA), обеспечивая студентов актуальными знаниями для будущей карьеры в области компьютерных наук. Статья рассказывает, что думает Oracle о дальнейшем развитии разработчиков, и дает список ссылок для обучения.
Choosing the Right Implementation Between ArrayList and LinkedList. Многие шутят, что LinkedList — это структура данных, которая нужна только для собеседования. И во многом это правда, встречается он редко.
Статья — часть туториала от inside.java, который они постоянно дописывают. В ней можно почерпнуть всю необходимую базу о работе коллекций LinkedList и ArrayList, посмотреть на их сравнение в алгоритмической сложности, сколько что занимает и так далее.
Статья больше подойдет для начинающих разработчиков, но и матерым инженерам вспомнить базу никогда не вредно.
Ускорение Spring REST API на 200%. Spring удобен, но его абстракции могут замедлять работу API. В статье сравнивают производительность Tomcat, Jetty и Undertow, а затем показывают, как обойти накладные расходы Spring и ускорить обработку запросов в три раза. Прикольная статья, особенно подойдет разработчикам, для которых Spring MVC == Tomcat и дальше не заглядывали.
Библиотека для кэширования Caffeine: анализ кода. Статья описывает библиотеку с использованием алгоритма TinyLFU, который сочетает частоту и свежесть запросов. Рассматриваются структуры данных, методы и старение данных для поддержания актуальности кэша. Это делает Caffeine эффективным инструментом для высоконагруженных сервисов, таких как Kafka и Cassandra.
Java 24 and IntelliJ IDEA. Пост рассказывает о том, как в IntelliJ IDEA поддерживаются языковые фичи Java 24. По большей части автор сосредоточилась на JEP 495 Simple source files and instance main methods. Говорит о том, какие в IDEA появились возможности для соответствующих рефакторингов и генераций кода. Также затрагивается JEP 494 Module Import Declarations и то, как можно навигироваться по соответствующим import-ам. По остальным джепам автор проходится достаточно коротко.
Spring-потрошитель. Один из хрестоматийных докладов о Spring обзавелся текстовой версией на Хабре. Удивительно, что ее до сих пор не было. Докладу уже 11 лет, но его все еще можно смело рекомендовать. Евгений Борисов проходится по ключевым фичам фреймворка, которые актуальны и по сей день. А фирменная подача материала делает восприятие в общем-то непростой информации легким и приятным.

Костя Максимов
Буквально я, когда увидел эту статью:

Implementing CQRS with Spring Modulith | Java && More. Статья объясняет, как реализовать паттерн CQRS (Command Query Responsibility Segregation) с использованием Spring Modulith. Она описывает архитектуру приложения с разделением на модули для команд (записей) и запросов (чтений), каждый из которых использует свою базу данных. При этом для доставки данных из одной базы данных в другую используется механизм ивентов (с изолированными транзакциями в рамках модулей!) из Modulith.
Performance Improvements in JDK 24 — Inside.java. Статья описывает улучшения производительности, которые были внедрены в JDK 24, по сравнению с JDK 23. Основное внимание уделено оптимизациям в работе с FFM API, улучшению производительности конкатенации строк с использованием скрытых классов, а также ускорению алгоритмов SHA3.
Clean your Memory: From Finalize to Cleaner. В статье обсуждается переход от устаревшего метода finalize() в Java к более современному и эффективному API Cleaner, который был введен в Java 9 для управления ресурсами, такими как сокеты, при завершении работы объектов. Она объясняет, как работает Cleaner и как он использует PhantomReference для отслеживания объектов, когда они становятся недоступными, что позволяет избежать проблем с производительностью и утечками памяти, характерных для finalize().
Road to JDK 25 — Over-Engineering Tic-Tac-Toe (Java 24)! Статья представляет собой разбор фич Java 24 на примере крестиков-ноликов. У автора целый цикл, посвященный релизам Java и доработкам крестиков-ноликов на основе JEP, входящих в релизы. В этой статье рассмотрели Stream Gatherers, Generational ZGC, Class File API и даже защиту от квантовых алгоритмов.
Джавовые события
JavaOne 2025, одна из крупнейших мировых конференций для Java-разработчиков, прошла с 18 по 20 марта 2025 года в Редвуд-Шорс, Калифорния. Это ежегодное мероприятие, организованное Oracle, собрало экспертов и энтузиастов Java со всего мира. Видеозаписи докладов доступны на сайте конференции.
Крупнейшая в РФ конференция JPoint 2025 состоялась 3 и 4 апреля. Организаторы представили 40 докладов от ведущих экспертов отрасли. От Т-Банка в конференции участвовали четыре докладчика:
Ренат Шайгарданов с докладом «Из Elasticsearch в Cassandra».
Дмитрий Фролов с докладом «Легаси. Оптимизации. Обфускация. Героическая борьба с Minecraft».
Виктор Вербицкий с докладом «Секрет производительности Camunda: внешняя история».
Спасибо за прочтение! Ждем вашей обратной связи в комментариях. Увидимся через месяц 😉
Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске!