
Всем привет! ?????
Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
Октябрь выдался интересным: JDK 26 приносит поддержку HTTP/3, Vector API снова в инкубации, а Swing внезапно обзаводится своим DatePicker — да, 2025-й, а Swing жив! Разработчики обсуждают Leyden и GPU-ускорение для Java-ИИ, а Oracle чинит 15 уязвимостей. В статьях свежие оптимизации ZGC, разбор виртуальных потоков, Jackson 3, Kafka Queues и немного философии про «хороший вкус» в разработке. А под конец релизы, от JUnit 6 до Spring 6.2.12. Заваривайте кофе, обновляйтесь до JDK 25 и читайте. Поехали ?
Горячие JEPы
JEP 529: Vector API (Eleventh Incubator). Предлагает очередной раунд инкубации для Vector API, которое позволяет реализовывать в Java векторные вычисления, например SIMD. JEP рассчитывает, что эти вычисления на целевых архитектурах (x64, AArch64) будут компилироваться в оптимальные машинные векторные инструкции.
JEP draft: JEP: Add a JDatePicker UI Component to the Swing UI Toolkit (Preview).
Добавляет новый стандартный Swing-компонент JDatePicker (в пакете javax.swing) — это виджет для выбора даты или диапазона дат из календаря плюс поле ввода. В Swing отсутствует собственный компонент Picker-дат, многие приложения используют сторонние библиотеки, а наличие встроенного компонента упростит разработку GUI на Java.

Роман Краснослабодцев
Да, Swing развивается. Нет, это не шутка. Да, 2025-й на дворе.
JEP направлен в JDK 26: 517: HTTP/3 for the HTTP Client API. Обновленный клиент для поддержки HTTP/3 с минимальным изменением кода.

Арсений Зайцев
Будет на одну причину меньше использовать не встроенный клиент, а это всегда приятно.
Главные новости
В октябрьском обновлении безопасности Oracle (CPU October 2025) для платформы Java SE устранено 15 уязвимостей, из которых 11 могут быть эксплуатированы удаленно без аутентификации.
Обновления затронули Java 8 u441, Java 11.0.26, Java 17.0.14, Java 21.0.6 и Java 25.0.1, устранив проблемы в компонентах Hotspot, JSSE, Libraries и JNDI. Oracle настоятельно рекомендует всем пользователям обновить JDK и JRE до последних сборок, особенно на серверах с открытым сетевым доступом.
Интересные видео
G1 GC: 3 Upcoming Improvements - Inside Java Newscast #99 В очень осеннем и дождливом выпуске Николай рассказывает о трех JEPs, касающихся сборщика мусора G1:
JEP 522: G1 GC: Improve Throughput by Reducing Synchronization. Сократилось количество синхронизаций между тредами G1 и самого приложения, что благотворно повлияет на утилизацию процессора.
JEP 523: Make G1 the Default Garbage Collector in All. Теперь G1 будет сборщиком мусора по умолчанию во всех случаях. Ранее для некоторых конфигураций среды мог выбираться Serial GC.
JEP draft: Automatic Heap Sizing for G1. Появится автоматическое управление размером хипа, если пользователь явно не задаст соответствующие флаги. То есть размер хипа будет меняться в пределах доступной RAM. Кстати, для ZGC такой JEP тоже есть.
Петр Портнов — Обновляться больно. Обновляйтесь В докладе Петр рассматривает две темы.
Первая — менеджмент зависимостей сторонних библиотек. Автор на примере конфликта мажорных версий v3 и v4 библиотек для работы с Protobuf рассказывает, что можно сделать, чтобы снизить вероятность подобных конфликтов и как проще обновляться на новую мажорную версию. Особенно когда мы имеем дело с системой, поделенной на множество микросервисов.
Вторая тема — best practices для работы с внутренними библиотеками. Как правильно предоставлять API, как их рефакторить и обновлять.
From JDK 21 to JDK 25 - Java Performance Update 2025 От JDK 21 до JDK 25 — заметные приросты производительности «из коробки» благодаря generational ZGC, компактным заголовкам объектов, автовекторизации SIMD, Leyden (ускорение старта/прогрева), FFM/JExtract, Stable Values и улучшениям виртуальных потоков. Стоит посмотреть доклад, чтобы понять, как корректно измерять и извлекать эти выигрыши в проде, какие фичи и тюнинги включать сейчас и что придет дальше (Valhalla, дальнейшие ускорения Leyden и Panama).
Assembling Project Leyden #JVMLS Проект Leyden — системный подход в JDK 24/25 к ускорению запуска и прогрева Java‑приложений: тренировочные запуски, сохранение профилей и зависимостей, предварительная загрузка или связывание классов и надежный AOT‑кэш.
Стоит посмотреть, если важен быстрый старт микросервисов, CLI или десктопа и хочется понять, что дает ~2× ускорение в JDK 24, что придет в JDK 25 (профили методов) и как избежать ловушек состояния или инициализации классов и переносимости при сборке.
Writing GPU-Ready AI Models in Pure Java with Babylon Как на чистой Java запускать и разрабатывать GPU‑ready-модели ИИ: через ONNX Runtime (Panama/JExtract), Project Babylon и Hat для генерации GPU‑ядер. Стоит смотреть доклад, если хочется быстро добавить ускорение (GPU/NPU) в свои Java‑приложения без ухода в C или Python: показаны живые демо, конкретные шаги по сборке и понятная дорожная карта Java для AI.
Полезные статьи
Виртуальные потоки в Java: эволюция, практика, подводные камни. Автор дает очень хорошую и понятную сводку по текущему состоянию виртуальных потоков. Обозначает, какую проблему они решают, когда их лучше всего применять, какие были проблемы в Java 21 и как их решили к 25-й версии.
Investigating The Smells of LLM Generated Code. Авторы исследуют чистоту и поддерживаемость генерируемого Java-кода. Они измеряли наличие code smells (плохих практик, потенциальных проблем) в Java-коде, сгенерированном такими инструментами, как ChatGPT, Gemini Pro и Falcon, и сравнивали с эталонным кодом, написанным профессионалами. Общий вывод: LLM-код значительно «грязнее»: в среднем на ~63% больше smells по сравнению с человеческим.

FreshBrew: A Benchmark for Evaluating AI Agents on Java Code Migration. Исследование представляет FreshBrew — набор критериев и задач для оценки ИИ-агентов по переносу (миграции) кода на Java на уровне проекта: например, обновление кода с одной версии JDK или библиотеки на другую. Авторы подчеркивают, что для надежной оценки важно сохранять семантику программы и не позволять агенту «подделывать» результат (reward hacking).
HTTP/3 Support in JDK 26. Статья рассказывает о внедрении поддержки протокола HTTP/3 в HttpClient начиная с JDK 26. Несмотря на то, что API почти никак не изменилось, в статье подчеркивается, что внедрение поддержки заняло несколько лет, в том числе из-за использования QUIC в качестве транспортного протокола для HTTP/3.
Introducing Jackson 3 support in Spring. Начиная с Spring 7 появляется поддержка Jackson 3, а поддержка Jackson 2 переходит в статус deprecated for removal. Хотя им все еще можно пользоваться для упрощения миграции на новый Spring. Важные изменения с точки зрения Spring:
замена
ObjectMapperна иммутабельныйJsonMapper;использование J
acksonJsonHttpMessageConverter(с поддержкой хинтов сериализации) вместоMappingJackson2HttpMessageConverter.
Подробности об изменениях в Jackson 3 можно прочитать в блоке со свежими релизами ?
Introducing Share Consumer Support (Kafka Queues) in Spring for Apache Kafka. Начиная с Spring 7 в Spring Kafka появится поддержка новой фичи Kafka — share groups, также известных как Kafka Queues. Основное отличие share groups от всем известных consumer groups заключается в том, что консьюмеров может быть больше, чем партиций, а разные консьюмеры могут читать параллельно сообщения из одной и той же партиции.
Сама фича все еще не считается production-ready: с выходом Kafka 4.1 она перешла в preview-статус и планирует достигнуть GA в версии 4.2 (выход которой запланирован на январь 2026 года).
Прочитать подробности о Kafka Queues и концепции share groups можно в KIP-932.
Transactions and ThreadLocal in Spring. Небольшая статья о том, как и для чего транзакции Spring используют ThreadLocal и TransactionSynchronizationManager для управления транзакциями в многопоточном приложении. Затрагивается то, как все это работает в реактивных приложениях, где ThreadLocal не работает.
NUMA-Aware Relocation in ZGC. Статья описывает функцию NUMA-aware relocation в ZGC (сборщик мусора в OpenJDK), которая будет доступна в JDK 26. Функция улучшает поддержку NUMA, сохраняя объекты ближе к использующим их потокам и повышая производительность приложений. Рассмотрены интеграция NUMA в фазу релокации ZGC, решаемые проблемы, ограничения и будущие улучшения.
Performance Improvements in JDK 25. Статья описывает ключевые улучшения производительности в JDK 25. Читатели узнают о нововведениях в библиотеках JDK, сборщиках мусора, компиляторе и рантайме, например о финализации API Scoped Values, оптимизации строк и Stable Values (Preview). Материал будет полезен разработчикам, желающим понять преимущества JDK 25 для своих приложений.
Просто интересное
Мне жаль, но вы используете подсветку кода неправильно. Блин, я хоть что-то в этой жизни делаю правильно?! ? Перевод статьи I am sorry, but everyone is getting syntax highlighting wrong. Автор делится мыслями о том, как настроить подсветку синтаксиса так, чтобы она стала максимально эффективной и помогала читать и понимать код быстрее, уменьшая когнитивную нагрузку.
Суть в том, что выделять нужно то, чего не так много. Это константы, комментарии, объявление (только объявление, а не использование) функций, классов и переменных. За счет этого код ощущается более чистым и лаконичным. Рекомендуем попробовать.
Мнение, Константин: Такой подход очень хорошо подойдет, если хорошо знаешь язык — его синтаксис и ключевые слова. В то же время, если ты новичок, есть опасность, что тебе, напротив, будет сложнее ориентироваться.
Что значит «хороший вкус» в разработке ПО? Перевод статьи What is "good taste" in software engineering?. По сути, автор говорит о гибкости в принятии решений. Не существует подходов, которые в 100% случаев приведут к успеху. Всегда нужно учитывать контекст, в котором работаешь. Контекст включает в себя нужды и приоритеты заказчика, нефункциональные требования к системе, уровень подготовки команды, с которой вы работаете, а также множество других факторов. Именно поэтому догматическое мышление крайне неэффективно и, вероятнее всего, приведет к провалу.

Константин Максимов
Я бы сказал, хороший вкус - это ориентирование на то, чтобы выпустить полезный и качественный продукт. Мне доводилось работать с людьми, которые полировали свой код, покрывали его тестами, строили фантасмагорические архитектурные конструкции, но при этом продукт не приносил бизнесу какого-либо вэлью, а только тяготил его. С другой стороны, были и люди, которые исходили из того, что нужно как можно быстрее дотолкать до прода, чтоб работало, но потом продукт увязал в техдолге. Так что очень важно поддерживать баланс и уметь идти на компромиссы.
Джавовые события
Devoxx Belgium 2025. 6—10 октября в Бельгии прошла очередная конференция Devoxx. На официальном канале Java появился плейлист с записями некоторых докладов и QA-сессий — Devoxx Belgium 2025 - YouTube. Помимо докладов, упомянутых тут, рекомендуем посмотреть доклад Nicolay Parlog - Structured Concurrency In Action в формате лайв-кодинга.
Свежие релизы
Вышло несколько новых версий Kora фреймворка, включая крупные обновления 1.2.0 вплоть до 1.2.4. В этих версиях реализовано множество важных улучшений, направленных на повышение стабильности, производительности и удобства разработки.
Появилась поддержка виртуальных потоков (Virtual Threads). Начиная с версии 1.2.0 HTTP-сервер на базе Undertow получил поддержку виртуальных потоков — мощного нововведения из Project Loom. Это позволяет эффективно обрабатывать тысячи одновременных запросов с минимальными накладными расходами, значительно повышая пропускную способность приложений.
Улучшения в OpenAPI-генераторе. В нескольких версиях (особенно в 1.2.0—1.2.4) проведена масштабная работа над генератором OpenAPI:
Добавлена опция
forceIncludeOptionalдля контроля@JsonInclude(ALWAYS)в Kotlin.Исправлены ошибки генерации полей
byte[], discriminator, nullableи валидации вложенных моделей.Улучшена обработка Form-параметров и префиксов аннотаций в Kotlin.
Добавлена опция
forceIncludeNonRequired— больше гибкости при описании API.
Расширение возможностей Kafka и телеметрии:
Добавлена поддержка
KafkaSkipRecordException— теперь можно корректно пропускать проблемные записи без падения потребителя.Улучшены метрики и логирование для @KafkaListener и @KafkaProducer, добавлена телеметрия контекста.
Исправлено поведение
KafkaAssignConsumerпри обновлении графа.
Улучшения в тестировании и DI:
Поддержка Mockito-сессий и проверка неиспользуемых моков в JUnit 5.
Исправлен конфликт системных свойств при инициализации нескольких графов приложения в тестах параллельно.
Добавлена возможность передачи Map системных свойств в KoraConfigModification.
Маскирование заголовков Cookie/Set-Cookie по умолчанию — безопасность «из коробки».
Добавлены конфигураторы тегов метрик для HTTP и gRPC.
Улучшено поведение CircuitBreaker, Retry и Fallback: исправлены ошибки в режимах HALF_OPEN и disabledи обработке исключений.
? Что еще важно?
Инкрементальная обработка теперь полностью поддерживается на уровне Gradle и KSP — быстрее сборка и разработка.
Почти все зависимости обновлены до последних версий, улучшены сообщения об ошибках, особенно в UnresolvedDependencyException — проще отлаживать DI.
Jackson обновился до версии 3.0. Из основных нововведений:
Java 17 как новый baseline.
Модули Java 8 (для поддержки java.time, и Optional) больше не нужны, теперь все это поддерживается из коробки (ура!).
Иммутабельные сущности: специфические JsonMapper, XmlMapper и другие вместо ObjectMapper.
Переименовали большого числа сущностей. Например,
JsonProcessingExceptionсталJacksonException,аJsonFactoryпревратился вTokenStreamFactory.Причина проста: названия были придуманы в версии 1.0, когда Jackson умел работать только с json. Сейчас же это может вводить в заблуждение.
Команда JUnit выпустила версию 6.0.0:
Базовая версия Java поднята до 17 (для Kotlin — 2.2).
Появились нативные
suspend-тесты безrunBlocking.Новый CancellationToken и флаг
--fail-fastвConsoleLauncher.Повсеместно добавлены аннотации JSpecify для null-контрактов.
Сменили CSV-провайдер на FastCSV.
Стало явным упорядочивание тестов и классов.
Убрали JUnit 4 runner.
Vintage помечен deprecated.
Релиз Testcontainers 2.0.0 включает исправления ошибок, обновление зависимостей и несколько новых возможностей, таких как реализация метода getHttpUrl для ClickHouseContainer и возможность экспорта gRPC-ендпоинта из BigQueryEmulator. Подробности в release notes.
Вышел релиз WildFly 38.0.0 Final и WildFly Preview 38.0.0 — сервер обновился до MicroProfile 7.1, включая OpenAPI 4.1 и Telemetry 2.1. Добавили поддержку инъекций EntityManagerчерез @Inject (в Preview), переработали документацию и каталог feature-packs. Основная версия остается на Jakarta EE 10 (Java 17/21), а Preview уже частично реализует Jakarta EE 11 Core Profile.
Вышел патч для GraalVM 25.0.1, набор security-фиксов и багфиксов (по мотивам CPU Oracle). Также компилятор Graal получил оптимизации для Vector API и оптимизацию узких мест в JIT. В Native Image улучшен анализ зависимостей, сокращен размер итоговых бинарников и добавлены новые параметры сборки.
Релиз Spring Framework v6.2.12 несет сразу несколько приятных улучшений:
Добавлен метод forEachByte в DataBuffer для эффективной работы с байтами.
Улучшена поддержка MySQL/MariaDB при генерации ключей.
Оптимизировано управление состояниями в
StompSubProtocolHandler.Устранены многочисленные баги. Например, неправильное поведение в
DefaultListableBeanFactoryи проблемы сUrlHandlerFilter.-
Обновились зависимости: Micrometer до версии 1.14.12 и Reactor до версии 2024.0.11.
Спасибо за прочтение! Будем рады обратной связи в комментариях — и увидимся через месяц ?
akardapolov
Пока не впечатляет, LGoodDatePicker выглядит получше.
В части UI/UX SwingX стоит на голову выше ванильного Swing-а.