Всем привет! ?????

Мы 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-реализация для поддержки новой модели, при этом сохранена совместимость с предыдущими схемами через настройку.

Спасибо за прочтение! Ждем вашу обратную связь в комментариях. Увидимся через месяц ?

Присылайте материалы, если встретили что-то интересное — опубликуем в следующем выпуске!

Комментарии (1)


  1. lampa
    09.09.2025 08:14

    Не понял прикола с Thread.sleep(0); Это о том, что не ленитесь вставлять sleep в if блок?