
Всем привет! ?????
Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
Соскучились по AoT-компиляции? Даже если нет, упоминаний о ней не избежать. Java 25, Spring 7, Spring Boot 4, Gradle 9.0.0, Intellij IDEA 2025.2, Amplicode 2025.2, что-то релизнулось, что-то только собирается, но обо всем уже нашли статьи и собрали для вас.
А теперь к громким новостям. Нидерландские ученые убили SQL — именно так мог бы звучать заголовок к научной статье о том, как 2,5 млн строк кода на PL/SQL переводили на Java с помощью LLM.
Горячий JEP
JEP 522, G1 GC: Improve Throughput by Reducing Synchronization повышен со статуса Draft до статуса Candidate. Этот JEP предлагает уменьшить накладные расходы сборщика мусора G1 для улучшения синхронизации между потоками приложения и потоками GC.
Главные новости
JDK 25 Initial Release Candidate. 12 августа вышел первый Release-Candidate Java 25. По ссылке полный список всех JEP, которые вошли в JDK 25, изменения последних билдов, а еще ссылки на более подробные статьи на inside.java об определенных фичах, вошедших в релиз.
Java Platform Extension теперь доступно на open-vsx.org. Расширение от Oracle для работы с Java на VScode доступно на open-vsx.org по лицензии Apache 2.0. В материале рассказывается о требованиях к JDK, поддержке Maven и Gradle, встроенных возможностях для компиляции, отладки, тестирования и рефакторинга, а еще о загрузчике JDK и интеграции с Project Explorer. Статья полезна тем, кто хочет использовать VS Code как основную IDE для Java и получить максимум из встроенных инструментов.
Интересные видео
Java for Small Coding Tasks. Видео про скриптинг на Java. Отличный способ посмотреть на привычный язык под другим углом и увидеть, как рушатся привычные подходы и табу.
Вначале рассказывается, почему для скриптов используется Java, а не Python. Ответ банален: автор хорошо знаком с Java, она ему привычна. Но вот то, как и с помощью чего пишутся скрипты, совсем непривычно.
Например, удобная и знакомая всем Intellij IDEA не очень подойдет, потому что вам вряд ли понадобится серьезная структура пакетов и классов для небольшого скрипта. А один файл часто удобнее открыть в редакторах попроще, например nvim или VS Code.
С инструментами для сборки тоже интересно. Никто не захочет использовать Maven или Gradle, чтобы запустить небольшой однофайловый скрипт. Поэтому можно компилировать и запускать в оперативной памяти. Да, так придется компилировать на каждом запуске, зато не нужно беспокоиться об упаковке в Jar каждый раз, когда поправляешь скрипт.
Одна строка #!/usr/bin/env java --source 25
в начале файла позволит запускать скрипт в среде Linux, просто указав путь к файлу. А если все-таки нужна зависимость, можно использовать jpm, чтобы управлять Maven-зависимостями без больших инструментов для сборки.
HTTP/3 in Java - Inside Java Newscast #96. В видео Николай рассказывает про JEP 517 и описанный в нем новый API HTTP-клиента Java под третью версию протокола. Основной проблемой стало изменение протокола TCP на UDP в HTTP/3. Здесь возможно несколько стратегий:
Отправить HTTP/2-запрос и, если возможно, переключиться на HTTP/3.
Отправить HTTP/3-запрос и в случае таймаута переключиться на HTTP/2.
Отправить HTTP/3-запрос и в случае таймаута вернуть ошибку.
Отправить сразу два запроса разных версий и использовать версию первого ответа.
Все эти стратегии будут реализованы на стороне клиента. Важно, что после выполнения JEP 517 HTTP/3 не станет версий по умолчанию, предпочтительной остается версия HTTP/2.
How to Upgrade to Java 25 #RoadTo25 В видео подробно разбираются проблемы и подводные камни при переходе на JDK 25 — от изменений в аннотациях, безопасности и работе с рефлексией до удаления старых API и модулей. Будет полезно разработчикам и командам, которые готовятся к миграции, поскольку в видео показывают, какие ошибки можно встретить и как правильно адаптировать код и окружение под новые требования платформы.

Арсений
Видео может в ближайшее время не понадобиться, потому что вряд ли из всех задач переезд на свежую Java является самой срочной :) Но я себе прикопал, чтобы вернуться к этому, когда переезд состоится.
All New Java Language Features Since Java 21 #RoadTo25 Обзорный рассказ обо всех новых фичах с Java 21 от развития pattern matching и работы с запечатанными типами до упрощения написания main-методов и поддержки Markdown в Javadoc. Будет интересно тем, кто хочет быть в курсе последних изменений в Java, понять, как они влияют на читаемость, производительность и организацию кода, и заранее подготовиться к переходу на новые версии.
Ahead-of-Time Computation in Java 25 #RoadTo25 Коротенькое видео о Project Layden и новых возможностях AOT-компиляции в JDK 25, которые позволяют ускорить запуск приложений и снизить нагрузку на JVM. Пригодится разработчикам, работающим с контейнерами, микросервисами и бессерверными функциями, так как показано, как кэш AOT можно встроить в сборочные pipeline и улучшить производительность в продакшене.
Auto-Vectorization in HotSpot #JVMLS Доклад о том, как JIT-компилятор превращает циклы в SIMD-инструкции для ускорения вычислений с учетом сложностей вроде reduce-операций и выравнивания данных. Обсуждаются runtime-проверки, многоверсионные циклы и сравнение с Graal. Будущие планы включают поддержку float16 и интеграцию с Panama, Valhalla и Babylon для ускорения работы с памятью.
Growing the Java Language #JVMLS Доклад о развитии Java на JVMLS посвящен идее сделать язык расширяемым вместо введения множества новых конструкций. Ключевой инструмент — классы типов через ”witness”. Они позволяют унифицировать операции сравнения, перегрузку операторов и преобразования типов, сохраняя строгую статическую проверку и совместимость со старыми типами. Пригодится архитекторам и ведущим разработчикам, которым важно понимать долгосрочное направление развития языка, а также тем, кто работает с большими кодовыми базами и сталкивается с ограничениями текущей модели типов.
Полезные статьи
Preparing for Spring Boot 4 and Spring Framework 7: What’s New? Статья про будущие нововведения Spring Framework 7 и Spring Boot 4. Оба обновления ожидаются уже в ноябре 2025 года.
Spring 7 принесет с собой список нововведений:
Jakarta EE 11.
Минимальная версия Java теперь 17.
Обещают улучшенную поддержку Kotlin 2.x.
spring-retry переходит в spring-core вместе с аннотациями @Retryable, @ConcurrencyLimit, @EnableResilientMethods.
@RequestMapping будет поддерживать параметр version для указания версии API.
RestClient и WebClient смогут работать с версиями API.
JmsClient — как RestClient, но для JMS.
Для null-safety будут использовать аннотации @Nullable и @NonNull от JSpecify.
Распаковка Optional в SpEl.
Обещают улучшения HttpHeaders API.
Jackson версии 3 и выше.
Список обновлений Spring Boot 4:
Стал более модульным, что должно уменьшить размеры и JAR файлов.
Как и со Spring 7, минимальная версия — это Java 17.
Больше индикаторов и проверок в Spring Boot Actuator.
Образы, собранные с помощью AOT(Ahead-Of-Time)-компиляции и GraalVM, должны стать быстрее.
Jackson 3.x по аналогии со Spring 7, Servlet 6.1, WebSocket 2.2 и Micrometer 2.0.
[JavaSpecialists 326] - Stream Gathering with a Different Distinct Function. Статья обсуждает использование Gatherers в Java для определения собственной функции distinct. Автор предлагает альтернативный подход к стандартному методу distinct(), который позволяет более гибко определять уникальность элементов в потоке, что иногда может быть очень полезно.
GC-Agnostic Load Barriers for Ahead-of-Time Compilation. Автор делится результатами своей магистерской работы, выполненной совместно с командой HotSpot GC и с помощью компилятора Oracle, где исследуется идея GC-агностичных барьеров загрузки.
Он показывает, как Project Leyden может сократить время прогрева приложений с помощью AOT-компиляции, какие проблемы создают GC-барьеры и как их можно унифицировать через патчинг инструкций на уровне Assembly. Материал будет интересен тем, кто хочет глубже изучить внутреннее устройство JVM, работу сборщиков мусора и компромиссы между производительностью и гибкостью рантайма.
Leveraging LLMs for Automated Translation of Legacy Code: A Case Study on PL/SQL to Java Transformation. Ученые из Нидерландов и Венгрии представляют исследование применения больших языковых моделей (LLM) для помощи в переводе массивного legacy-кода — около 2,5 млн строк PL/SQL-кода без документации и тестов — в Java-эквивалент.

Taking Java Arrays to Another Dimension. Статья рассматривает подходы к хранению массивов в памяти в Java, акцентируя внимание на их внутреннем устройстве и оптимизации. Автор рассказывает о том, как массивы организуются в памяти, их ограничениях, а также предлагает альтернативные подходы для повышения производительности и гибкости работы с многомерными структурами данных.
Debugging Transactions? Let Spring Debugger Do the Heavy Lifting | The IntelliJ IDEA Blog. Обзор нововведений плагина Spring Debugger: теперь при дебаге приложений можно увидеть, контекст какой транзакции сейчас используется. Помимо этого, для JPA-сущностей в дебаггере можно будет увидеть текущее состояние. Если неохота читать — есть видеоверсия.
Просто интересное
Thread.sleep(0) is not for free. Небольшая заметка о том, что Thread.sleep(0) не бесплатный. Связано это с тем, что при таком вызове все еще вызывается нативный метод Thread.sleepNanos(0). А за этим методом идет выполнение метода операционной системы, и, хоть он и проводит для такого случая быстрые проверки, они замедляют систему. Поэтому стоит избегать кода:
int delay = allGood ? 0 : waitShorty;
Thread.sleep(delay);
Свежие релизы
Релиз Quarkus 3.26.0 несет заметные изменения:
поддержку именованных persistence units и источников данных в Hibernate Reactive;
улучшения в Dev UI, включая новую страницу настроек для управления хранилищем;
редизайн консоли HQL, интегрирующий функциональность, представленную в новом модуле Hibernate Tools for Natural Language.
Более подробная информация в примечаниях к выпуску.
Выпуск LangChain4j 1.4.0 содержит новые интеграции: модуль watson.ai, модель транскрипции аудио в Azure OpenAI, а еще возможность подсчета токенов в Anthropic.
Нас ждут:
новые интерфейсы ToolArgumentsErrorHandler и ToolExecutionErrorHandler, которые перехватывают исключения, выбрасываемые методами, аннотированными @Tool;
новый класс DefaultExecutorProvider, использующий пул виртуальных потоков в качестве внутреннего дефолтного executor-а.
Подробнее в примечаниях к выпуску.
Релиз Apache TomEE 10.1.1 содержит исправления ошибок и множество обновлений зависимостей. Этот релиз гарантирует, что TomEE корректно работает на Java 21+, чтобы подготовиться к предстоящему релизу JDK 25. Но проверки безопасности через спецификацию Jakarta Authorization пока не работают на Java 21+ из-за удаления Java SecurityManager. Подробнее в примечаниях к выпуску.
Релиз Apache Camel 4.14.0 порадует исправлениями ошибок, обновлениями зависимостей и списком улучшений:
поддержкой предстоящего релиза JDK 25;
возможностью включать пользовательский заголовок авторизации в исходящий вызов OAUTH2-токена;
улучшенной производительностью продьюсера RabbitMQ.
Подробнее в примечаниях к выпуску.
А теперь много про Hibernate.

Релиз Hibernate ORM 7.1.0.Final предоставляет новые возможности:
Интерфейс Locking, состоящий из классов перечислений Locking.Scope и Locking.FollowOn. Эти классы расширяют класс перечисления Jakarta Persistence PessimisticLockScope для поддержки различных аспектов пессимистичной блокировки.
Новый интерфейс Timeouts, служащий вспомогательным для класса Jakarta Persistence Timeout.
Поддержку обнаружения ресурсов в средах Java SE в дополнение к аналогичной поддержке в средах Jakarta EE.
Подробнее в примечаниях к выпуску.
Hibernate Reactive 3.1.0.Final включает совместимость с Hibernate ORM 7.1.0.Final и обновление до Jackson Databind 2.19.2.
Релиз Hibernate Search 8.1.0.Final приготовил:
совместимость с Hibernate ORM 7.1.0.Final;
обновления до версий 9.1 и 8.19 Elasticsearch;
возможность запрашивать агрегации по терминам и диапазонам не только для подсчетов.
Подробнее в примечаниях к выпуску.
Второй milestone release Spring Boot 4.0.0 включает исправления ошибок, улучшения в документации, обновления зависимостей и новые возможности:
поддержку новой аннотации Spring Framework @HttpServiceClient на интерфейсах, обнаруженных через класс AutoConfigurationPackages;
добавление аннотаций о допустимости nullable-значений, предоставляемых JSpecify.
Подробнее в примечаниях к выпуску.
What's new in Gradle 9.0.0. Все об изменениях с Gradle 8.0 по 9.0.0 и самое главное — смена формата версионирования.
В последней версии Configuration Cache стал предпочтительным методом запуска Gradle, в версии 10 хотят установить этот режим по умолчанию. Некоторые API, которые его не поддерживали, пометили на удаление.
Список изменений:
Kotlin подняли до версии 2, Groovy — до версии 4.
Минимальной версией для запуска Gradle 9 стала Java 17.
Ускорили компиляцию скриптов, написанных на Kotlin DSL.
Как и все в мире, Java в последнее время переехали на новые null-safety-аннотации от JSpecify.
Поддержка Spring 7, Reactive Debugger, работа с БД и HTTP прямо в IDE: это и много другое в Amplicode 2025.2 — вышла новая версия Amplicode и много чего принесла с собой.
Добавили поддержку .registerBean() из будущего Spring 7. Теперь можно писать название проперти как в файле application.yml или .properties, а Amplicode сгенерирует @Value и все остальное.
Наибольшие изменения коснулись HTTP-клиента Connekt, он теперь open-source. В качестве нововведений Connekt получил:
Генерацию запросов прямо из контроллера в коде (только PRO).
Готовый запрос легко копируется в cUrl.
Импорт коллекций из Postman и .http-файлов Intellij.
OAuth 2.0 из коробки, немного конфигураций — и Connekt сам будет ходить за токенами перед запросами.
Результаты SQL-запросов можно смотреть прямо в интерфейсе IDE, не переключаясь на DBeaver. А еще добавили подсказки в Docker Compose и Helm-файлах и появилась поддержка S3 в Terraform.
Вышла IntelliJ IDEA 2025.2 с целым списком нововведений:
Улучшился AI: появилась поддержка SQL, YAML, JSON и Markdown в автодополнение кода. В чат с AI теперь можно удобно добавлять картинки, таблицы и целые папки. А IntelliJ IDEA теперь может выступать в роли MCP для сторонних AI-агентов.
Появилась поддержка Spring Modulith (только Ultimate).
Появилась Spring Debugger в качестве отдельного плагина (только Ultimate).
Появился инструмент для отладки виртуальных потоков.
Появилась поддержка Java 25.
Можно ознакомиться с полным списком нововведений.
Вышел Spring Modulith 2.0 M1 released. Основное изменение — переработанный Event Publication Registry, который теперь поддерживает новые состояния событий ("published", "processing", "failed", "resubmitted"), улучшает обработку ошибок и добавляет мониторинг «зависших» событий. А еще обновлена JDBC-реализация для поддержки новой модели, при этом сохранена совместимость с предыдущими схемами через настройку.
Спасибо за прочтение! Ждем вашу обратную связь в комментариях. Увидимся через месяц ?
Присылайте материалы, если встретили что-то интересное — опубликуем в следующем выпуске!
lampa
Не понял прикола с
Thread.sleep(0);
Это о том, что не ленитесь вставлятьsleep
вif
блок?