Почему Kotlin возвращает статику и как баг в OpenJDK роняет JVM

Spring АйО 1,3 тыс. 1 ч 7 мин 9 мин 21.10.2026
Главное

В 76-м выпуске подкаста «Spring АйО» ведущие Павел Кислов и Михаил Поливаха разбирают ключевые события индустрии разработки ПО: от засилья искусственного интеллекта на международных IT-конференциях до неожиданных архитектурных разворотов языка Kotlin. Собеседники также погружаются в глубокий JVM-хардкор, обсуждая опасности статического состояния в памяти, проблемы проекта Ktor и свежий баг в OpenJDK, приводивший к падению виртуальной машины из-за инструкций процессора AVX-512.

🍁 Осенний сезон конференций и экспансия AI 0:33

Осень ознаменовалась стартом крупного сезона технических конференций как в России, так и за рубежом . Михаил Поливаха, регулярно выступающий на международных и локальных площадках, отметил радикальное изменение контента мероприятий под давлением хайпа вокруг нейросетей . Если раньше программы Joker, JPoint или зарубежных конференций практически полностью посвящались чистому стеку Java, то теперь даже классические мероприятия делят программы пополам: один день отводится на Java, а второй — на рассуждения о будущем профессии разработчика под влиянием AI .

По оценке Поливахи, подобная трансформация в мировом масштабе выражена даже острее, чем в РФ:

Как передает Поливаха слова Серджи Алмара (Sergi Almar), организатора Spring I/O в Барселоне, интерес к докладам об AI исходит главным образом от самих разработчиков, жаждущих услышать о новых инструментах . Однако этот тренд среди инженеров уже начинает угасать: невозможно сделать полтора десятка конференций с одинаковыми темами про интеграцию LLM в процесс разработки без того, чтобы контент не стал повторяться .

🏢 Медленная адаптация в энтерпрайзе и реалии бизнеса 6:14

В то время как интерес аудитории к поверхностным темам об AI падает, в корпоративном секторе внедрение технологий идет стабильно, но медленно . Михаил Поливаха подчеркнул распространенную ошибку восприятия: ленты соцсетей и медиа создают иллюзию тотальной революции, показывая лишь самый передовой край индустрии . На практике IT-сектор крайне неоднороден, а распределение технологических бумов происходит неравномерно .

В качестве примера Поливаха привел бюрократические процедуры в странах Европы и США, где государственные институты до сих пор во многом полагаются на бумажные визы и физические печати в паспортах, несмотря на разговоры о цифровизации . Разговаривая на Devoxx с директором по развитию компании Vaadin, Поливаха выяснил, что разговоры о крахе классических вендоров из-за генеративного AI пока никак не отражаются на их реальных бизнес-метриках: европейский банковский сектор и бэкенд-решения продолжают стабильно работать со старыми проверенными инструментами .

Павел Кислов, комментируя ситуацию вокруг продуктов вроде JetBrains и OpenIDE, отметил, что на практике за громкими презентациями часто скрывается «Confidence Driven Development» — концепция, работающая со сцены, но с трудом применимая в продакшене :

📉 Кризис посещаемости: почему Devoxx теряет солдауты 12:36

На крупнейшей европейской конференции Devoxx Belgium (рассчитанной на 3200–3500 участников в кинокомплексе Kinepolis в Антверпене) около 60% докладов из 6–8 параллельных треков были посвящены AI-агентам и инструментарию, и лишь 40% — классической разработке . При этом мероприятие впервые за долгое время столкнулось с отсутствием традиционного молниеносного солдаута .

По данным Поливахи, организаторы Devoxx продали лишь около 2700 билетов, зафиксировав спад продаж примерно на 15% . Похожая картина наблюдалась и на Spring I/O: если раньше все 1300 мест выкупались за 4–5 месяцев до старта, то теперь закрытие продаж произошло буквально в последние дни перед событием .

В кулуарном разговоре организаторы Devoxx подтвердили Поливахе свои опасения: падение посещаемости уже затронуло Devoxx Poland, Devoxx UK и Devoxx France . Главный вопрос индустрии: зачем специалисты покупают билеты сегодня?

⭐ Джош Лонг, Брайан Гетц и шоу талантов 23:39

Михаил Поливаха убежден, что главным незаменимым преимуществом офлайн-мероприятий остаются звездные спикеры и атмосфера шоу, которые невозможно эмулировать алгоритмами :

«Джош Лонг — это Джош Лонг с нейросетями или без них. Брайан Гетц — это Брайан Гетц».

В Европе известность спикеров колоссальна: на выступления признанных звезд Java-сообщества (Джош Лонг, Брайан Гетц, Виктор Рентей, Торбен Янсен) собираются полные залы даже в тех случаях, когда темы докладов банальны или уже неоднократно освещались на YouTube . Джош Лонг превращает рассказ о Spring в фееричное шоу с юмором, ради чего люди и приходят в зал .

Павел Кислов противопоставил этому российский опыт: в отечественном комьюнити слушатели традиционно более требовательны к технической новизне . Если спикер в РФ начнет пересказывать документацию релизов Spring Boot 3 или 4, публика на Joker или JPoint немедленно раскритикует доклад за отсутствие практической ценности, тогда как на западных площадках комфортное повторение базовых истин в исполнении харизматичного лектора воспринимается позитивно .

📚 ChatGPT против бумажных учебников 29:36

Обсуждая ценность получения информации, Кислов поделился личным опытом: сублимированное знание, полученное через быстрый поиск или готовый ответ от ChatGPT, перестало приносить удовлетворение . Из-за этого ведущий вернулся к штудированию бумажных учебников по физике за 8–11 классы и задачников по математике Прасолова, находя особое удовольствие в самостоятельном прохождении всех этапов решения :

Поливаха парировал с менеджерской точки зрения: абстрактное чувство «вкуса» трудно оцифровать в корпоративные метрики . Инженерам стоит учиться применять «мышление из первых принципов» по методу Илона Маска, четко формулируя, почему именно фундаментальный подход к получению знаний дает измеримое профессиональное преимущество . Иронизируя над тягой бизнеса к оптимизации всего подряд, Кислов пошутил, что излишнее погружение в метрики приводит к идеям «отменить больничные, потому что из-за них падают графики» .

🧱 Kotlin возвращает статику: companion blocks и ловушки памяти 34:39

Одной из центральных технических тем выпуска стало намерение разработчиков Kotlin ввести так называемые companion blocks — фактически возвращение концепции статических блоков без создания объектов, от которых создатели языка ранее осознанно отказывались в пользу companion object .

Михаил Поливаха подробно разобрал, почему ключевое слово static в Java является источником архитектурных проблем :

  1. Неопределенный жизненный цикл. Любое состояние, привязанное к статическому полю, живет в приложении неопределенно долго. Выгрузка классов загрузчиком (class unloading) в типичной JVM происходит крайне редко .
  2. Утечки ресурсов. В качестве свежего примера Поливаха привел баг с утечкой потоков, обнаруженный в их проекте: встроенный HTTP-клиент JDK использует пул соединений (с виртуальными потоками в Java 21+), и попытка вынести клиента в статическую область приводит к зависанию ресурсов при перезапусках контекста (например, в Spring Boot DevTools или тестах) .
  3. Жесткая связанность (tight coupling). Статические вызовы невозможно переопределить, параметризовать или чисто замокать без инструментов вроде PowerMock .

Утверждение о том, что состояние должно жить всё время работы программы — опасное заблуждение из мира C/C++, где подобный подход порождает дыры в безопасности и тяжелые утечки памяти . Даже создатели Rust построили модель владения вокруг строгих границ жизненного цикла ресурсов .

При этом решение Kotlin с companion object Поливаха назвал спорным компромиссом. По его словам, сами создатели языка (включая Андрея Бреслава) впоследствии признавали внедрение синглтонов-компаньонов спорным шагом, сильно усложнившим интероп с Java-байткодом .

Почему разработчикам нужны статические extension-функции? 44:22

С другой стороны, Поливаха горячо поддержал идею появления статических extension-функций в Kotlin . В качестве аргумента он сослался на классический труд Джошуа Блоха Effective Java, где подробно объясняются преимущества статических фабричных методов над конструкторами:

🕊️ Раздвоение личности: JPA, Spring и судьба Ktor 50:00

Ведущие сошлись во мнении, что Kotlin регулярно оказывается в положении «двойного агента» . Изначально язык создавался не для Android, а как более совершенная замена Java на бэкенде . Однако, выйдя на этот рынок 8–10 лет назад, авторы столкнулись с абсолютной монополией Hibernate и JPA :

Аналогичный внутренний конфликт прослеживается в судьбе легковесного фреймворка Ktor от JetBrains . Проект страдает от размытого позиционирования:

💥 Как проект Leyden и AVX-512 уронили виртуальную машину в продакшене 53:29

Финальная часть беседы коснулась хардкорных оптимизаций JVM в рамках Project Leyden, направленных на максимальный перенос вычислений в стадию Ahead-of-Time (AOT) .

Эволюция сохранения данных между перезапусками JVM:

  1. AppCDS (Application Class Data Sharing): в бинарный архив сбрасывались разобранные метаданные классов, что уменьшало Startup Time и потребление памяти Metaspace .
  2. AOT Cache: к метаданным классов добавили сырые профилировочные данные для компиляторов C1 и C2 .
  3. Сохранение машинного кода: свежая инициатива предполагает прямое сохранение в кэш скомпилированных машинных инструкций (результатов работы C2), минуя фазу профилирования на старте .

По спецификации механизм AOT Cache обязан быть абсолютно безопасным: если кэш невалиден или поврежден, JVM должна штатно откатиться на медленную загрузку и обычную JIT-компиляцию через интерпретатор . Однако команда Поливахи столкнулась с критическим сбоем .

При сборке релизного Docker-образа на виртуальной машине x86-64 с процессором, поддерживающим векторные инструкции AVX-512, сгенерированный AOT-кэш намертво ронял JVM с core dump при запуске на серверах с аналогичной ОС, но без поддержки блока инструкций AVX-512 .

Как выяснилось, в кодовой базе OpenJDK присутствовал баг . Реакция мейнтейнеров оказалась противоречивой:

Подводя итоги, Поливаха подчеркнул, что даже на глубоких аппаратных уровнях абсолютных гарантий не существует: ошибки регулярно встречаются как в OpenJDK, так и в микрокоде самих центральных процессоров . Все заверения облачных вендоров и гарантии надежности в конечном счете упираются в суровые условия SLA, где любые фатальные падения нередко признаются «негарантийными случаями» .

💬 Цитаты

«Джош Лонг — это Джош Лонг с нейросетями или без них. Брайан Гетц — это Брайан Гетц.»

Михаил Поливаха 24:33

«Это не готовая пережёванная еда из ChatGPT, это прожитый опыт, и поэтому у него есть вкус.»

Павел Кислов 31:55

«Большинство людей даже не подозревают, что баги есть и в самом процессоре.»

Михаил Поливаха 1:04:08
👥 Спикеры
📚 Упомянутые книги
🔗 Упомянутые сайты и проекты
📖 Термины
AppCDS (Application Class Data Sharing)
Механизм JVM, позволяющий сохранять разобранные метаданные классов в файл для ускорения старта новых инстансов.
AOT Cache
Кэш предкомпиляции в OpenJDK (Project Leyden), сохраняющий профилировочные данные и машинный код между запусками.
AVX-512
Набор векторных микропроцессорных инструкций x86, ускоряющий параллельные математические вычисления.
Companion object
Специальный синглтон-объект внутри класса в Kotlin, заменяющий классические статические методы и поля Java.
Солдаут (Sellout)
Полная распродажа всех доступных входных билетов на мероприятие до момента его начала.
📊 Цифры
🗓 Хронология
  1. 2021 Павел Кислов начал регулярно посещать профильные IT-конференции без пропусков сезонов.
  2. Сентябрь Официальный релиз версии Java 27 с исправлениями архитектурных багов AOT-кэширования.
  3. Осень 2026 Проведение осенних конференций Joker и Devoxx Belgium, зафиксировавших сдвиг программы в сторону AI.
⚖️ Другая сторона
Технологии и IT Kotlin OpenJDK Spring Boot Devoxx JVM