
Всем привет! 👋👋👋👋👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
В этом выпуске рассказываем о новых JEPs в OpenJDK, которые вошли в статус Candidate. Спойлер Applet API — RIP. В этом месяце вышли сразу IntelliJ IDEA 2025.1 и OpenIDE — эта битва будет легендарной!
Мы добавили краткий обзор JavaOne’25. И, как обычно, собрали полезные статьи: как избавиться от Flaky-тестов с помощью JMina, как ZGC аллоцирует память в хипе. Сделали подборку материалов о паттернах и методологиях разработки и разбавили размышлениями о том, как писать хороший код и оставаться профессионалом.
Горячие JEPs
OpenJDK — 8 новых JEPs, включая смерть Applet API. На неделе с 14 апреля в OpenJDK произошел значимый апдейт: восемь JEPs перешли из черновиков в статус Candidate. Это означает, что предложения прошли начальную стадию рассмотрения и теперь официально участвуют в планировании будущих версий JDK.
Самый заметный среди них — JEP 504: Remove the Applet API. Applet API был помечен как устаревший еще в JDK 17, и вот теперь его собираются удалить совсем. Applets умерли давно, так что Java наконец подчищает архаику.
Не менее интересен JEP 513: Flexible Constructor Bodies, который позволит использовать this и super в любом месте конструктора, а также JEP 506: Scoped Values который должен стать более простой в использовании версией ThreadLocal, но не прийти ему на замену.
______________________________________________________________________________
JEP draft: Compact Object Headers (Production) предлагает перевести функцию Compact Object Headers из экспериментального статуса (введенного в JEP 450) в полноценную production-ready-функцию. Это означает, что для ее включения больше не потребуется флаг -XX:+UnlockExperimentalVMOptions. С момента появления в JDK 24 функция прошла обкатку в продакшене, включая масштабное использование в Amazon (в том числе через бэкпорты в JDK 21 и 17). Исправлены баги, доказана стабильность и польза. Пора признать ее зрелой.
Размер заголовка объекта в JVM уменьшается с 96—128 до 64 бит на 64-битных архитектурах. Это снижает потребление памяти, улучшает плотность размещения объектов и повышает локальность данных.
______________________________________________________________________________
JEP draft: Extend native memory tracking to the entirety of the JDK. Предлагается расширить систему Native Memory Tracking (NMT) на весь JDK. Это позволит отслеживать использование памяти как в нативных C-библиотеках самой виртуальной машины HotSpot, так и в библиотеках JDK, которые используют FFM (Foreign Function & Memory API).
Свежие релизы
Community:
Обоих AI-ассистентов занесли под одну подписку.
Добавили поддержку Java 24.
Компилятор Kotlin K2 теперь включен по умолчанию.
Добавили Kotlin Notebooks. Самая близкая ассоциация с этим инструментом — Google Colab, только блоки кода на Kotlin вместо Python.
Переработали терминал.
Добавили возможность автоматических обновлений плагинов.
Для Windows появилась поддержка нативных диалоговых окон проводника.
Добавили поддержку Scala 3.
Ultimate:
Добавили поддержку логической структуры Liquibase-файла.
Автосоздание Spring-репозиториев.
Containerfile теперь поддерживается плагином Docker без переименования в Dockerfile.
Ускорили WSL.
OpenIDE: первая российская среда разработки с поддержкой Java 24. Представлена новая open source IDE на базе Intellij Idea. Удалили много телеметрии JetBrains, из-за чего, по субъективным ощущениям, работать стало быстрее и плавнее, а еще добавили свой маркетплейс приложений и продублировали туда все популярные плагины, лицензия которых это позволила.

Jakarta EE 11 Web Profile наконец-то вышел. Это вторая часть релиза Jakarta EE 11 после Core Profile (декабрь 2024). Теперь у нас:
Финализированный Web Profile.
Поддержка в GlassFish 8.0.0 как официальной reference-реализации.
Готовность других платформ (WildFly, Open Liberty и др.) в ближайшие месяцы.
Четвертый milestone-релиз Spring Framework 7.0.0 принесет улучшения документации, обновление зависимостей и новые функции:
Новый класс OptionalToObjectConverter для автоматического преобразования Optional<T> в его вложенный объект.
новый класс ClassFileMetadataReader, поддерживающий JEP 484 (Class-File API) для чтения и записи классов в байт-коде Java.
Вышел релиз Jox 1.0.0 — библиотеки для виртуальных потоков, реализующей эффективную структуру данных Channel на Java, предназначенную для работы с виртуальными потоками. В этом релизе:
Массовое обновление зависимостей.
Удален метод collectAsView() из интерфейса Source и класса CollectSource, так как аналогичная функциональность теперь предоставляется классом Flows.
Настроена интеграция с инструментом Renovate для автоматического обновления зависимостей.
Третий бета-релиз Hibernate Reactive 3.0.0 порадует:
Добавлением методов upsertAll() и upsertMultiple() в реализацию интерфейса StatelessSession из Hibernate ORM.
Исправлением ошибки UnexpectedAccessToTheDatabase, возникающей при слиянии (merge) отсоединенной сущности, помеченной аннотациями @OneToMany или @ManyToMany.
Вышли версии Tomcat 11.0.6 и Tomcat 9.0.104, которые несут новые возможности:
Java Runtime больше не обязан предоставлять реализацию алгоритма MD5 (Message-Digest Algorithm).
Класс JsonErrorReportValve теперь защищен от NullPointerException.
Улучшена обработка URL-кодирования вида %nn в классе RewriteValve.
Третий бета-релиз библиотеки для интеграции с LLM LangChain4j 1.0.0 несет важные изменения:
Поддержку дополнительных возвращаемых типов в JSON-схемах Structured Outputs.
Поддержку стриминга и наблюдаемости в Amazon Bedrock.
Удаление устаревших интерфейсов: ChatModelRequest и ChatModelResponse.
Oracle Java Extension for Visual Studio Code Version 24.0.0 Is Now Available! Прогаете на VS Code на Java? Тогда вам это понравится. Теперь у плагина полная поддержка Java 24, улучшили производительность, пофиксили баги. Подробнее обо всех изменениях можно прочитать на официальной страничке плагина.
Вышли две новые версии Kora 1.24 и 1.25. В них появились:
Больше конвертеров для Json и StringConverter по умолчанию.
Поддержка свойств Kotlin-интерфейсов в @ConfigSource.
OpenAPI-поддержка транслитерации Enum кириллических констант.
OpenAPI-поддержка дополнительного именования Enum констант в SnakeCase-формате.
Пользовательская опция filterWithModels в OpenAPI для фильтрации моделей, когда указана openapiNormalizer-опция FILTER.
Пользовательская опция prefixPath в OpenAPI для генератора контроллеров HTTP-сервера.
OpenAPI-оптимизация авторизации HTTP-сервера в Kotlin.
Больше настраиваемых опций экспортера трассировки.
Главные новости
Oracle опубликовала график выхода JDK 25:
Rampdown Phase One: 5 июня 2025.
Final Release Candidate: 21 августа 2025.
General Availability: 16 сентября 2025.
Доступны ранние сборки JDK 25 (Build 17, 18 и 19) с багфиксами. Тестируем, ищем баги и жмем на кнопки в Java Bug Database.
Интересные видео
How Netflix Uses Java - 2025 Edition Вышли все доклады с Java One. Обсудили много фич последних релизов Java. Отдельно понравился доклад про Stream Gathers. Советуем всем разработчикам, которых интересуют последние изменения в языке.
В JavaOne'25 Highlights - Inside Java Newscast #89 Николай коротко рассказал о некоторых докладах и интервью:
Разговор с Dan Haidinga о тренингах для AOT-компиляции и почему использовать для этого бенчмарки и юнит-тесты не лучшая идея.
Доклад Garbage Collection in Java: The Performance Benefits of Upgrading с верхнеуровневым обзором всех GC OpenJDK.
Отрывок доклада Apache Maven Survival Guide „Bring It On! — Mode“, который посвящен maven-экстеншенам.
Интервью с Mark Reynold о том, как final сделают по-настоящему final.
Отрывок из доклада Next-Level Features of LangChain4j for Production-Ready AI Applications, в котором авторы рассказывают о том, как они построили RAG-пайплайн, необходимый для того, чтобы модели динамически получали информацию из различных источников.
Презентация роадмапа проекта Valhalla из выступления Брайана Гётза Where is the Java language going? Оно точно живо и скоро выйдет 😁
Finalizing the Java On-ramp - Inside Java Newscast #90 В выпуске рассказывают о ключевых изменениях в Java 25: компактном синтаксисе, безымянных классах, обновленном вводе-выводе (JEP 445, 512) и старте образовательного сайта Learn.java. Смотрите, чтобы узнать, как писать более лаконичный код и эффективно осваивать современные фичи, а еще можно заглянуть в будущее Java-разработки.
Полезные статьи
Избавляемся от Flaky-тестов в CI/CD при помощи JMina. В статье автор о разработанной им JMina — инструменте для перехвата и проверки логов (SLF4J) прямо в тестах. С ее помощью можно встраивать asserts в ключевые точки кода, мгновенно останавливать тесты при ошибках и гарантировать вызов всех ожидаемых логов. Примеры кода, разбор частых причин flaky-тестов и решение для точечной диагностики сделают тесты стабильнее. Рекомендуем, если устали от плавающих падений в пайплайне и хотите отлаживать их как профи.
В центре внимания — Java: Local Variable Type Inference. Перевод от команды Axiom JDK разбирает, как работает вывод типов в Java, когда var улучшает читаемость кода, а когда его стоит избегать, чтобы не скрывать важную информацию. Материал 2019 года актуален и в 2025: принципы Брайана Гётца остаются фундаментом, а примеры с пересечением типов и лямбдами помогут избежать типичных ошибок. Рекомендуем, чтобы научиться балансировать между лаконичностью и ясностью кода, а еще чтобы понять, почему var до сих пор вызывает споры даже среди опытных разработчиков.
How ZGC allocates memory for the Java heap. Статья будет интересна Java-разработчикам, работающим с высоконагруженными приложениями, и энтузиастам-мусорщикам, которые хотят глубже понять управление памятью в ZGC. В материале разбирается, как ZGC в OpenJDK 25 борется с фрагментацией через Mapped Cache, организует физическую и виртуальную память, поддерживает NUMA-системы и минимизирует задержки. Рекомендуем, чтобы научиться тонко настраивать кучу (через -Xms, -Xmx), оптимизировать аллокации и избегать OutOfMemoryError в сложных сценариях. Это must-read для тех, кто хочет выжать максимум из ZGC в production.
Лучшие практики создания отказоустойчивых систем. Автор рассматривает список паттернов и практик: Retry, Circuit Breaker, Fallback, Timeout, идемпотентность и Bulkhead. Помимо самого определения приводятся детали реализации на Java и Python. Дополнительно автор указывает, на что стоит обратить внимание при реализации.
Even more OpenTelemetry — Kubernetes special. В этом туториале подробный рассказ о том, как настроить OpenTelemetry в Kubernetes. Вообще. у автора есть отдельный проект, посвященный работе с OpenTelemetry в самых разных условиях. Рекомендуем!
A Practical Guide to Testing Spring Controllers With MockMvcTester. Туториал посвящен MockMvcTester — обертке над MockMvc с поддержкой AssertJ.

Костя Максимов
Пушка, бомба! Кто юзал MockMvc в тестах, знает, что ассертить результаты запроса и особенно тело ответа — это страшная боль. Тесты получаются громоздкими и сложными. MockMvcTester дает отличный API, которое позволяет писать интуитивно понятный код. AssertJ one love!
Async IO with Java and Panama: Unlocking the Power of IO_uring. В статье рассматривается эффективный подход к организации работы виртуальных потоков Java в контексте операций ввода и вывода. Автор рассказывает о проблеме производительности, возникающей из-за блокировок при выполнении I/O-операций в виртуальных потоках, что снижает их эффективность. В качестве решения предлагается использование механизма io_uring, что позволяет значительно сократить время блокировок и оптимизировать работу с вводом и выводом.
Markdown in Java Docs? Shut Up and Take My Comments! | The IntelliJ IDEA Blog. Статья в блоге JetBrains о Markdown java-docs, которые появились в JDK 23. Можно почитать о том, какие связанные с этим фичи есть в Intelij IDEA: режим чтения и конвертация старых java-doc в Markdown-формат.
Как должен выглядеть правильный Docker Image для Spring-Boot-приложения? Статья в блоге «Spring АйО» посвящена созданию правильного Docker-образа для Spring-Boot-приложений. Автор объясняет, как обеспечить не только запуск приложения, но и возможность диагностики проблем, таких как сбои или замедление работы. Рассматриваются инструменты и подходы для сбора информации о состоянии системы в момент сбоя, методы анализа производительности приложения с использованием GC-логов, Spring Boot Actuator и Java Flight Recorder. Особое внимание уделяется настройке JVM и Docker для эффективного мониторинга и устранения неполадок.
Тестируем JEP 491 вместе с Деном Вегой. Еще одна статья в блоге «Spring АйО» посвящена эксперименту с JEP 491 — улучшению синхронизации виртуальных потоков в Java 24. Ранее блокировка synchronized могла прикреплять виртуальный поток к физическому, что ограничивало параллелизм. С JEP 491 эта проблема должна быть устранена: виртуальные потоки могут блокироваться без привязки к конкретному физическому носителю. А так ли это на самом деле, можно узнать после прочтения статьи :)
Go's HTTP Server Patterns in Java 25. Интересная статья о том, как взять паттерны разработки из Go и написать все на Java. Если хотите посмотреть код на Java без классов, то он существует и показан в этой статье. Выглядит интересно. Основной задачей автора было показать, что веб=разработка на Java не сложнее, чем на Go, и кажется, у него это хорошо получилось.

Просто интересное
Пиши простой код. Отличный пост, в котором все по делу. Все мы любим свою работу и хотим делать интересные вещи. Но накрутить абстракции и паттерны не к месту легко, особенно когда большую часть кода генерирует AI-ассистент. И очень сложно сделать максимально просто
GRASP: почему настоящая архитектура начинается не с SOLID. Хороший конспект на тему архитектурных практик. Сначала автор рефлексирует на тему ООП и моделей предметной области, о том, как сформировать видение этой модели. После этого переходит к GRASP как к способу переложить это видение на код. Все паттерны рассматриваются в сцепке друг с другом. А самое главное, со здравым смыслом. Прослеживается одна мысль: все эти принципы не догматы, а полезные практики, которые делают код понятным и поддерживаемым.
The Best Programmers I Know. В статье автор перечисляет, какие особенности он заметил у людей, которых можно назвать лучшими программистами. Очень хороший и правильный список. Даже если вы не стремитесь быть лучшим, отсюда можно почерпнуть много интересных мыслей о своей работе и карьере.
Джавовые события
JVM Day пройдет 30 августа 2025 в штаб-квартире Т-Банка в Москве. Ждем подачи заявок на выступления 🙂
Don’t Miss IntelliJ IDEA Conf 2025! — бесплатная онлайн-конференция от JetBrains — пройдет 3 и 4 июня.
Спасибо за прочтение! Ждем вашу обратную связь в комментариях. Увидимся через месяц 😉