
Всем привет! ???? Мы — Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
Октябрь выдался насыщенным: JDK 28 обрастает новыми возможностями, Project Leyden готовит AOT-компиляцию, ZGC учится эффективнее управлять памятью, а работу с off-heap памятью ускорили аж до 18 раз. Тем временем Spring AI обзавелся полноценной памятью сессий и подтверждением вызовов инструментов, а Quarkus представил инструмент для упрощения миграций между версиями. Разбираемся, что происходит внутри JVM, какие новинки стоит взять на заметку и чем еще порадовала Java-экосистема за прошедший месяц. Поехали! ?
Горячие JEPы
Появилось много новых JEP, которые направлены в JDK 28. Ниже — самые интересные.
JEP 540: Simple JSON API (Incubator). В JDK 28 впервые появится инкубационная версия стандартного API для парсинга и генерации JSON без сторонних библиотек. API ориентирован на простые сценарии работы с JSON и не претендует на замену Jackson или Gson, поскольку не поддерживает автоматический маппинг в Java-объекты и потоковую обработку.
JEP 543: Structured Concurrency. Structured Concurrency наконец получил финальный статус и будет интегрирован в JDK 28. Изменений с последнего превью нет.
JEP 544: Ahead-of-Time Code Compilation. В JDK 28 появляется AoT-компиляция. Хронология такая:
В JDK 24 появился JEP 483, который позволил сохранять в AoT Cache загруженные и связанные классы.
В JDK 25 появился JEP 515, который добавил в AoT Cache профили выполнения методов — JDK уже знала, какие методы горячие и какие нужно компилировать в первую очередь. Тем не менее компиляция все еще происходила.
В JDK 28 появляется именно AoT-компиляция — в AoT Cache может сохраняться непосредственно машинный код, полученный от C1/C2.
JEP 545: Faster Startup and Warmup with ZGC. Первый JEP, касающийся оптимизаций ZGC. Он призван сократить накладные расходы на запуск и прогрев приложений путем сокращения бюджета на подготовку памяти и позволяя быстрее выделять память по мере роста нагрузки. Теперь JVM не нужно запускать сразу с каким-то значимым количеством памяти в -Xms, поскольку необходимая память будет выделена достаточно быстро.
JEP 546: Adaptive Heap Sizing for ZGC. Второй JEP про оптимизации ZGC, также добавленный в JDK 28. В нем представляется новый механизм адаптивного управления памятью. Подобный механизм есть в G1GC, однако там адаптивное управление направлено на соблюдение целевого времени пауз. ZGC же изначально ориентирован на минимальные паузы, поэтому адаптивное управление предполагает баланс между потреблением памяти и CPU.
Главные новости
Компрометация сертификатов eMudhra: экстренные обновления Java. В октябре стало известно о компрометации закрытых ключей восьми промежуточных сертификатов удостоверяющего центра eMudhra. Проблема затронула в том числе доверенные сертификаты Java, из-за чего Oracle выпустила экстренные обновления JDK с исключением соответствующих корневых сертификатов.
Уязвимость получила критическую оценку CVSS 9.1. Хороший повод проверить актуальность Java Runtime и содержимое cacerts, особенно в приложениях, активно использующих TLS.
Октябрьский CPU: 55 патчей безопасности для Java SE. 20 октября Oracle выпустила квартальное обновление безопасности. В разделе Java SE перечислены 55 новых патчей. 49 уязвимостей потенциально эксплуатируются по сети без аутентификации. Это отдельный набор исправлений к прошлой новости.
Интересные видео
Java — The Year of the Runtime! Рон Пресслер рассуждает о том, как развитие AI-инструментов для написания кода может повлиять на роль языков программирования и сред их исполнения. По его мнению, в будущем большее значение может приобретать эффективность runtime, а не особенности самого языка. В связи с этим в докладе рассматривается то, как JVM развивалась за последнее время: улучшения сборщиков мусора, AOT-компиляция, Project Valhalla и оптимизация использования памяти. Многие из этих улучшений позволяют Java-приложениям становиться быстрее и эффективнее просто за счет обновления JDK.
What's Going Wrong with My JVM?! A Guide to First-Time Failure Diagnosis. Сандра Пейн на примерах проблем с heap рассказывает, какие диагностические данные стоит собирать заранее и как искать причину сбоя. Рассматривается ситуация, когда приложение перестало отвечать, а диагностических данных для поиска причины нет. Полезно всем, кто дежурит на проде ?
Reflect, Transform, Accelerate: Bringing GPU Computing to Java. Хуан Фумеро показывает, как Heterogeneous Accelerator Toolkit превращает Java-код в представление для GPU и запускает вычисления через OpenCL или CUDA. Среди примеров — умножение матриц и профилирование ядер.
Полезные статьи
Как Netflix повысила эффективность ИИ‑агентов для программирования с помощью JetBrains IDE. Перевод статьи How Netflix Made AI Coding Agents More Efficient with JetBrains IDE Intelligence.
Современные ИИ-агенты в основном навигируются по коду поиском определенных кусокв текста в файлах (например с помощью, grep). Это накладывает ряд ограничений: поиск медленный, неточный и расходует много ресурсов. Netflix решили проверить, повысится ли эффективность агентов, если дать им полноценный движок навигации и анализа кода — н например, тот, что используется в JetBrains IDE.
Спойлер: да, повысится. Причем в зависимости от задачи и модели улучшения составляют от 15 до 60%. Это подразумевает и сокращение времени на выполнение задачи, и более экономный расход токенов. В статье подробно рассказывается о том, как именно Netflix выстроили архитектуру для эффективного взаимодействия агента и движка IntelliJ IDEA. Раскрывается методология бенчмарков, даются результаты. В конце — закономерный вывод: совершенствование инструментов навигации для ИИ-агентов — очень перспективная область.
JDK 28 ускоряет выделение off-heap-памяти в 6—18 раз. Разработчики OpenJDK существенно оптимизировали работу Foreign Function & Memory API. Теперь небольшие выделения памяти через Arena.ofConfined() обслуживаются специальными пулами нативной памяти, что позволяет избежать частых обращений к системному аллокатору. В микробенчмарках ускорение достигает 6—18 раз, причем оптимизация работает и с виртуальными потоками. Самое приятное, что для получения выигрыша существующий код переписывать не потребуется.
Как проверить совместимость проекта с value-классами в JDK 28. Команда OpenJDK советует прогнать тесты JDK 28 как с preview-функциями, так и без них. При включенном preview value-классами становятся 30 core-классов, включая обертки примитивов, Optional и классы java.time. Это влияет на сравнение через ==, синхронизацию и работу WeakHashMap. В статье есть примеры для проверки.
Как Quarkus ищет причины сбоев с помощью LLM. Авторы разбирают инструмент, который собирает связанные трейсы, логи и метрики из Grafana-стека и передает их модели для анализа. В статье — архитектура, отбор данных и проверка на искусственно созданных сбоях.
Любопытные подкасты
Inside Java: неизменяемые данные и будущее языка. Николай Парлог и Дэн Смит обсуждают, как records, value-классы и lazy constants помогают работать с неизменяемыми данными.
A Bootiful Podcast: создатель jOOQ о SQL и Java. Джош Лонг поговорил с Лукасом Эдером о том, зачем jOOQ типобезопасный DSL, как он работает с диалектами SQL и динамическими запросами и почему SQL по-прежнему важен. Обсуждают также хранимые процедуры и современные аналитические базы.
Inside Java: как исправляют критические ошибки в OpenJDK. История ошибки, обнаруженной незадолго до выхода JDK 27: при определенных условиях содержимое строк могло повреждаться. На ее примере показывают, как команда OpenJDK разбирает проблему и проводит исправление через релизный процесс.
Просто интересное
Как Gradle предлагает обучать AI-агентов работе со сборкой. В октябрьской рассылке Gradle рассказал о двух официальных skills: один проверяет сборку на соответствие рекомендациям, другой обновляет Gradle Wrapper и проверяет результат. Команда приводит результаты собственных экспериментов с моделями. Любопытный пример того, как знания об инструменте упаковывают для агентов.
Свежие релизы
Quarkus представил Almanac — инструмент для сравнения версий. Команда Quarkus представила новый инструмент, который позволяет подробно сравнивать любые две версии фреймворка. Almanac показывает изменения конфигурационных параметров, зависимостей, расширений и публичных Java API, включая удаленные методы и изменения сигнатур. Поддерживаются все версии Quarkus начиная с 0.0.1. Полезная штука для тех, кто регулярно обновляет фреймворк и хочет заранее оценивать последствия миграции.
Spring AI 2.1 RC1: память сессий и подтверждение вызовов инструментов. Spring AI получил сразу несколько интересных возможностей для разработки AI-агентов. Появилась память сессий с журналом событий и автоматическим сжатием истории диалога, а также механизм подтверждения вызовов инструментов, включая MCP. Кроме того, улучшена работа с reasoning-моделями и добавлен поиск по заранее вычисленным эмбеддингам. Особенно полезное обновление для тех, кто строит сложные агентные системы на Java.
Gradle 9.8.2: исправления безопасности и поддержка Java 27. Gradle исправили три опасные уязвимости, связанные с десериализацией и разрешением зависимостей. Команда рекомендует обновиться до 9.8.2, а для пользователей Gradle 8 аналогичные исправления есть в версии 8.14.6. Кроме того, демон Gradle теперь можно запускать на Java 27.
Quarkus 4.0.0.Beta1. Первая бета следующей крупной версии фреймворка требует минимум Java 21 и обновляет сетевую основу до Netty 4.2 и Vert.x 5. Появилась подключаемая поддержка HTTP/3, обновлены Hibernate ORM и Jackson. Помним, что это бета: самое время проверить совместимость ваших приложений, но API еще может измениться.
Spring Boot 4.2.0-RC1. В релиз-кандидате ускорили поиск классов и ресурсов в исполняемых JAR, а spring-boot-properties-migrator научился завершать запуск приложения при ошибках или предупреждениях. Еще обновили стандартный Buildpacks builder.
Экстренное обновление Quarkus 3.33 LTS. Версия 3.33.4.1 закрывает несколько CVE и обновляет зависимости, включая Jackson, Netty и Vert.x. Так, одна из уязвимостей в REST Data Panache — CVE-2026-87744: при настройке метода через @MethodProperties могли потеряться роли, заданные на уровне ендпоинта, и апи внезапно становилось общедоступным.
Спасибо за прочтение! Ждем обратную связь в комментариях. Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске! Увидимся через месяц ?