
Всем привет! 👋 👋 👋 👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
В этом выпуске: дикая сторона Java — неожиданные трюки, которые работают. Узнаем, как переключение контекста убивает продуктивность и как с этим бороться. Разберем третью и четвертую части серии про HotSpot C2 JIT Compiler: измерим время компиляции, оптимизируем циклы и ускорим JIT.
Посмотрим на свежие JEP и разберемся, какие новинки ждут нас в будущих версиях Java. Погрузимся в реальные проблемы миграции баз данных: транзакционные DDL, конфликты обновлений и правильные стратегии применения изменений. А в конце — большое видео на 2,5 часа про все ключевые фичи, которые появились в Java 22 и 23. Приятного прочтения!
Горячие JEP-ы
Ahead-of-time Command Line Ergonomics. Предлагается упрощенный механизм создания AOT-кеша, позволяющий в одном запуске JVM автоматически выполнить тренировочную запись и последующую сборку кеша. Решение минимизирует необходимость использовать несколько команд запуска, упрощая процесс подготовки приложения к работе.
Automatic Heap Sizing for the Serial Garbage Collector. В рамках JEP реализована динамическая корректировка размера кучи при использовании Serial GC. Система автоматически адаптирует параметры памяти с учетом изменений нагрузки и доступных ресурсов, что позволяет снизить задержки, связанные с работой сборщика мусора, без обязательной предварительной настройки.
Cooperative JFR Sampling. Представлен механизм выборочного сбора стековых трассировок JFR, осуществляемый только в заранее определенных безопасных точках. Такой подход снижает риск возникновения сбоев, связанных с небезопасным чтением стека, и обеспечивает корректное взаимодействие с асинхронными сборщиками мусора.
Deprecate UseCompressedClassPointers for removal. JEP инициирует процесс устаревания флага UseCompressedClassPointers с последующим его удалением в будущих релизах. Это изменение направлено на оптимизацию реализации и повышение производительности за счет использования единого формата сжатых указателей для классов, что упрощает поддержку и улучшает согласованность объектного заголовка.
JEP 502: Stable Values (Preview) перешел в статус Proposed to Target и ожидается к релизу в JDK 25. Подробнее о нем мы писали в предыдущем выпуске.
Свежие релизы
Представлены обновления ранних сборок JDK: JDK 24 с Build 36 (release notes) и JDK 25 с Build 9 (release notes); разработчикам советуют сообщать об ошибках через Java Bug Database.
Четвертый бета-релиз Hibernate ORM 7.0.0 содержит:
переход на спецификацию Jakarta Persistence 3.2;
последнюю версию, предназначенную для Jakarta EE 11;
базовую поддержку JDK 17;
улучшенные проверки доменной модели;
миграцию от Hibernate Commons Annotations (HCANN) к новому проекту Hibernate Models для низкоуровневой обработки доменной модели.
Выпуск Hibernate Reactive 2.4.5.Final обеспечивает совместимость с Hibernate ORM 6.6.7.Final.
Micronaut Foundation выпустила версию 4.7.5 Micronaut Framework, включающую исправления ошибок и обновления для модулей Micronaut Security, Micronaut Validation, Micronaut Maven Plugin, Micronaut Kafka, Micronaut Test Resources и Micronaut Discovery Client. Более подробную информацию об этом выпуске можно найти в примечаниях к выпуску.
Релиз Quarkus 3.18.2 (Quarkus 3.18.0 был пропущен) несет обновления зависимостей и исправления:
исправление NullPointerException в Hibernate ORM при сбое подключения к БД;
при копировании нативного исполняемого файла из хоста в контейнер теперь сохраняются Unix-права на выполнение.
Более подробную информацию об этом выпуске можно найти в журнале изменений.
Выпуск Kora 1.1.20 с небольшими улучшениями и исправлениями:
Добавлена аннотация оптимизации @EntityCassandra.
Добавлен более гибкий способ настройки компонентов gRPC.
Исправлены ошибки обработки Cassandra UDT типа для списков.
Исправлена работа дискриминаторов моделей в OpenAPI-генераторе.
Более подробную информацию об этом выпуске можно найти в журнале изменений.
Вышел GlassFish 7.0.22
Двадцать второй релиз включает:
исправления ошибок;
обновления зависимостей;
скрытие имен атрибутов паролей в CommandInvokedEvent и логгере команд;
добавление атрибутов Add-Opens и Add-Exports в статический shell GlassFish для совместимости с новыми версиями Java, GlassFish Embedded и JVM.
Подробнее — в примечаниях к выпуску.
Native Build Tools 0.10.5
Oracle Labs выпустила версию Native Build Tools — проекта GraalVM, состоящего из плагинов для взаимодействия с GraalVM Native Image. Среди изменений:
поддержка единого reachability-metadata.json, так как ранее тесты ожидали раздельные файлы метаданных;
исправление ошибки Gradle-плагина Native Build Tools, возникающей из-за временного файла access-filter.json.
Анонсирована версия 4.7.3.1 Graal Development Kit, включающая интеграцию с Micronaut 4.7.3.
Выпуск Spring Cloud Stream Applications 2025.0.0 и 2024.0.1
Новые выпуски поставляются с обновлениями зависимостей до Spring Boot 3.4.2/Spring Cloud 2024.0.0 и Spring Boot 3.3.8/Spring Cloud 2023.0.5. Среди нововведений:
поддержка Micrometer Tracing;
новый параметр enableSecurityScan в common.yml для управления Trivy-сканированием безопасности (по умолчанию — false).
Вышел первый бета-релиз LangChain4j 1.0.0
методы generate() стали deprecated, заменены на методы chat() для нового Chat API;
рефакторинг ToolExecution для конфигурирования и исполнения инструментов.
Команда планирует GA-релиз в первом квартале 2025 года.
JHipster 8.9.0 и Jhipster Lite 1.28.0/1.27.0
Версии 1.28.0 и 1.27.0 JHipster Lite поставляются со многими обновлениями зависимостей, в частности Vitest 3.0.5 для исправления критической проблемы безопасности, CVE-2025-24964.
Выпуск JHipster 8.9.0 включает: обновления зависимостей до Spring Boot 3.4.2, Node 22.13.1, Gradle 8.12.1, Angular 19.0.6 и Typescript 5.7.3 и поддержку простых полей времени (класс Java LocalTime) без привязки к дате в JHipster Domain Language (JDL).
Выпуск Keycloak 26.1.1
В новом выпуске содержатся исправления ошибок и новые функции, такие как:
новая опция x509-cert-auth-crl-abort-if-non-updated, предотвращающая вход, если CRL не обновлена;
опция force-login в reset-credential-email, завершающая сессию и принуждающая осуществить новый вход.
Состоялся релиз Jox 0.4.0
Jox — библиотека виртуальных потоков, которая реализует эффективную структуру данных Channel в Java, предназначенную для использования с виртуальными потоками, — включает примечательные изменения:
рефакторинг Channel (конструктор теперь private);
изменение расположения значения размера буфера канала.
Вышла 25.0.0.2-beta Open Liberty,
IBM выпустила версию 25.0.0.2-beta Open Liberty, в которой реализована возможность настройки функции MicroProfile Telemetry 2.0, mpTelemetry-2.0 для отправки журналов аудита Liberty в коллектор OpenTelemetry.
Project Reactor 2024.0.3
Третий сервисный релиз, предоставляет обновления зависимостей до reactor-core 3.7.3, reactor-netty 1.2.3, reactor-pool 1.1.2.
Аналогично Project Reactor 2023.0.15, пятнадцатый сервисный релиз, предоставляет обновления зависимостей.
Интересные видео
Java 24 - Better Language, Better APIs, Better Runtime Лекция Никола Поллока, разработчика Java в Oracle. Посвящена нововведениям в Java 24 и другим ключевым изменениям в экосистеме Java. В выступлении обсуждается ускорение запуска приложений с помощью AOT-компиляции, улучшения в работе виртуальных потоков, новые API для работы с байт-кодом и сборщиками потоков, а еще оптимизация сборщиков мусора, включая GGC и ZGC. Лекция полезна разработчикам, которые хотят быть в курсе последних изменений в Java, улучшить производительность своих приложений и освоить новые инструменты и подходы в разработке.
Project Loom and Virtual Threads: Next Phases Лекция посвящена Project Loom и внедрению виртуальных потоков в JDK 21, которые позволяют повысить уровень конкурентности в серверных приложениях. В ходе выступления обсуждаются ключевые аспекты работы виртуальных потоков, их преимущества и проблемы, связанные с их использованием. Будет полезно разработчикам, интересующимся многопоточностью, структурной конкурентностью и новыми возможностями Java, включая улучшения в JDK 21 и будущих версиях.
Modern Java Deep Dive Большое видео на 2,5 часа, в котором подробно рассказывается обо всех современных фичах в Java, которые принесли Java 22 и 23: unnamed patterns, stream gatherers, class-file api и многое другое. Если не следили за изменениями, это отличное видео, чтобы все наверстать.
How I became my son's hero by building an AI Minecraft Mod with LangChain4J by Dominique Broeglin Gen AI, RAG — если вам не знакомы эти слова, это видео для вас. Помимо указанного в видео базово разбирается LangChain4J. А еще автор рассказал про проблемы тестирования приложений с Gen AI. Для любителей Майнкрафта оставим картинку со звуком.

Java annotation processing magic for muggles by Álvaro Sánchez Mariscal Arnaiz Доклад посвящен annotation processing. В видео автор разобрал runtime, buildtime и compiletime annotation processing. Подробно были разобраны инструменты, которые используют annotation processing, а также инструменты, которые позволяют его произвести. Не забыли обсудить медленный Spring, то, как Lombok может сломать Micronaut, и почему Lombok «неправильно» врывается в Java-компиляцию.
Полезные статьи
3 200% нагрузки на процессор. Автор столкнулся с проблемой, когда его серверная машина оказалась перегружена из-за использования незащищенной TreeMap в многопоточной среде. Это привело к бесконечному циклу и нагрузке на процессор в 3 200%.
Автор подробно описывает, как он диагностировал проблему, воспроизвел ее в разных языках программирования (Java, C++, Go и других) и предлагает способы ее решения. Основной акцент сделан на важности многопоточного тестирования, правильной обработки исключений и использования синхронизированных структур данных. Статья полезна разработчикам, работающим с многопоточностью, и тем, кто хочет глубже понять, как избежать подобных ошибок в своих проектах.
Вышла третья и четвертая часть из серии Introduction to HotSpot JVM C2 JIT Compiler. В третьей части серии исследуется флаг CITime, который позволяет измерять время компиляции на разных этапах. Разобраны ключевые фазы оптимизации в C2-компиляторе, включая On Stack Replacement (OSR), и проанализировано влияние этих процессов на производительность JIT-компиляции.
В четвертой части рассматриваются оптимизации циклов в C2 JIT-компиляторе HotSpot JVM. Описаны такие техники, как канонизация CountedLoop, разворачивание и векторизация циклов, устранение проверок границ и предсказание условий. Приведен пример трассировки оптимизаций с -XX:+TraceLoopOpts.
Дикая Java. Небольшая развлекательная статья про разные способы заставить Java неочевидно работать. Запуску комментариев мы поразились всей редакцией. Статья будет интересна всем, кто программирует на Java, и расскажет, почему та или иная дичь на Java возможна 😀
Эволюция экосистемы Java под интеграцию ИИ. Статья не только дает обзор инструментов для интеграции ИИ, но и содержит подробный туториал, который позволит попрактиковаться в их применении. Следуя ему, можно написать своего чат-бота для помощи в траблшутинге утечек памяти в Java. Бот будет взаимодействовать с сервисом Oracle Generative AI через соответствующую SDK. Для формирования промптов, работы с контекстом и историей чата используются LangChain4j и БД chromadb.
Секреты JVM: что происходит с ошибками под капотом. Короткая и простая статья о том, как в JVM происходит обработка исключений. Из нее вы узнаете, что такое таблицы исключений и по какому алгоритму происходит поиск нужного блока catch и всех блоков finally, которые нужно выполнить.
Gradle best practices. Отличная шпаргалка по best practices при использовании Gradle. Практики разделены на две секции — организация и оптимизация. Очень приятно, что каждый пункт сопровождается ссылкой на соответствующий раздел в документации Gradle. И да, статья на сайте Kotlin, поэтому неудивительно, что первый совет — используйте Kotlin DSL 🙂
Valhalla — эпичный рефакторинг Java (статьи на Хабре в трех частях: 1, 2, 3).
Текстовая расшифровка и перевод выступления Брайана Гетца Valhalla - Java's Epic Refactor, о котором мы рассказывали в одном из предыдущих выпусков.

Феня
Мур, всем привет! Я Феня, аватар проекта Valhalla в этом дайджесте. Спасибо АйО, что перевели доклад обо мне. Брайан подробно рассказал, почему мой приход в Java кардинально поменяет правила игры в отношении классов и примитивов. А также как это позволит в разы эффективнее работать с памятью. Помните: хоть я надвигаюсь уже очень долго, мой приход неизбежен. Так что лучше бы вам быть к нему готовым!
Database Migrations in the Real World | The IntelliJ IDEA Blog. Статья Database Migrations in the Real World обсуждает ключевые проблемы миграции баз данных в масштабных системах. Автор объясняет, почему выполнение миграций при запуске приложения может привести к сбоям, и рекомендует раздельное применение изменений. Помимо этого рассматриваются ограничения транзакционных DDL-операций в разных СУБД и способы предотвращения конфликтов при одновременных обновлениях схемы. На Хабре вышел перевод этой статьи от команды Spring АйО.
Introduction to MockMvcTester. Статья знакомит с MockMvcTester — новым API в Spring 6.2, который упрощает тестирование контроллеров Spring MVC, интегрируя MockMvc с AssertJ. Автор объясняет его преимущества, настройку и демонстрирует примеры тестирования HTTP-запросов.
Просто интересное
Context-switching is the main productivity killer for developers. Статья объясняет, как частые переключения между задачами снижают продуктивность разработчиков. Автор отмечает, что каждое быстрое сообщение в Slack приводит к переключению контекста и в результате к потере времени и ошибкам. Он анализирует причины постоянных переключений и предлагает стратегии для их минимизации.
Заговор разработчиков против корпораций: архитектура и принципы. В прошлом выпуске мы уже приводили предыдущую статью — разоблачение техноанархистов, посвященную практикам саботажа в кодовой базе. Автор, как и обещал, выпустил следующую часть. Из нее вы узнаете шокирующую правду о принципах SOLID. Увидите, как усиливают гравитацию в монорепозиториях, чтобы замедлить разработку, и как unit-тесты под громкие возгласы об облегчении рефакторинга на самом деле душат в разработчиках желание им заниматься. Обязательно прочтите и помните: техноанархисты повсюду. А с распространением ИИ-ассистентов их, вероятно, станет только больше...
The End of Programming as We Know It. Интересная статья, где автор очень оптимистично смотрит на будущее программирование в эпоху ИИ. Разработчики будут активно пользоваться ИИ-ассистентами, которые уже сейчас обладают внушительными возможностями. Появилось даже понятие CHOP (Chat-oriented programming). Но это вовсе не значит, что ИИ в какой-то момент заменит разработчиков и кто угодно сможет написать сложную систему, просто написывая ИИ-ассистенту. Ведь программирование никогда не было просто написанием кода.
Программирование — это систематизация и автоматизация. ИИ-ассистенты просто дают нам инструментарий, благодаря которому мы сможем сконцентрироваться на действительно важных вещах: реализации более амбициозных идей и удовлетворении потребностей бизнеса.

OpenLDK. JIT-компилятор и среда выполнения Java, который переводит байт-код в Lisp, что обеспечивает взаимодействие между кодом на Java и Common Lisp. Как говорится, месье знает толк в извращениях!
Джавовые события
15 января прошла конференция Voxxed Deys CERN, а 14 февраля опубликовали видео докладов.
6 марта 2025 года прошла конференция Spring Now 2025, организованная командой Spring АйО.
Спасибо, что читаете нас! Увидимся через месяц 😉
Присылайте материалы, если встретили что-то интересное — опубликуем в следующем выпуске!