Spring Boot vs Quarkus vs Micronaut: где Java-микросервисы в 2026 году

JDK 27 выходит через неделю, а битва за облако разгорается сильнее. Разбираемся, какой фреймворк реально выигрывает в 2026 году — и стоит ли мигрировать.

TL;DR: быстрый расклад

Spring Boot остаётся индустриальным стандартом для enterprise-проектов — экосистема, комьюнити и найм решают. Но если у вас Kubernetes и жёсткие ограничения по памяти или startup-времени, Quarkus и Micronaut дают объективно лучшие цифры. JDK 27 с G1 по умолчанию и встроенной post-quantum криптографией добавляет веса всем трём, но особенно — контейнерным рантаймам.

Что изменилось к 2026 году

Весной 2026 вышли JDK 26, а JDK 27 готовится к GA 15 сентября. Ключевое: G1 теперь GC по умолчанию на всех конфигурациях, а не только при большой куче. Это влияет на startup всех трёх фреймворков, но особенно заметно для тех, кто работает в контейнерах с ограниченной памятью.

В экосистеме тоже движение: Micronaut 5.0 вышел в мае 2026, Spring Boot 4.0 идёт с поддержкой Jakarta EE 11, Quarkus держит стабильный релиз-трайн. GraalVM для native image тоже заметно повзрослел — время сборки сократилось, а совместимость улучшилась.

Бенчмарки: две независимые площадки

Чтобы не опираться на один источник, я сверил данные из двух независимых замеров. Первый — Gillius Programming (Mac M2 Pro, GraalVM 25, JDK 25, Postgres 17) с тестовым приложением на JDBC + Flyway + JSON API. Второй — techoral.com (AMD EPYC 7763, JDK 25, PostgreSQL 16, REST API + база данных). Цифры совпадают по порядку, хотя абсолютные значения различаются из-за железа.

Startup time

На JVM Micronaut традиционно быстрее всех: 0,66 секунды против 1,15 у Quarkus и 1,9 у Spring Boot в тесте Gillius. На native images разрыв практически исчезает — Quarkus и Micronaut оба укладываются в 50 мс, Spring Boot Native в 104 мс.

На EPYC-сервере (techoral) результаты выше из-за другого окружения, но соотношение сохраняется:

  • Spring Boot 3.4 (JVM): ~2 850 мс, Native: ~83 мс
  • Quarkus 3.11 (JVM): ~720 мс, Native: ~18 мс
  • Micronaut 4.5 (JVM): ~890 мс, Native: ~38 мс

Потребление памяти

Вот где разрыв самый драматичный. На native images Quarkus использует 3,2 МБ heap против 11 МБ у Spring Boot — в 3,4 раза меньше. Общий RSS-расход (вся память процесса) у Quarkus ~70 МБ против ~149 МБ у Spring Boot Native.

РежимSpring Boot 3.4Quarkus 3.11Micronaut 4.5
JVM, heap idle~218 МБ~95 МБ~110 МБ
JVM, heap под нагрузкой~420 МБ~210 МБ~240 МБ
Native, heap idle~78 МБ~42 МБ~58 МБ
Native, heap под нагрузкой~185 МБ~98 МБ~115 МБ
Throughput, req/s (JVM)~17 840~21 950~19 700

Источники: Gillius Programming (Java 25 startup benchmark, M2 Pro), techoral.com (Spring Boot vs Quarkus vs Micronaut 2026 benchmark, AMD EPYC 7763)

Throughput

На JVM Quarkus выдаёт ~22 000 req/s, Micronaut ~20 000, Spring Boot ~18 000. На native images throughput у всех немного падает из-за отсутствия JIT-оптимизаций — но разрыв между Quarkus native (~18 600) и Spring Boot JVM (~17 840) уже не в пользу Spring.

Когда что выбирать

Spring Boot — если вы строите большое enterprise-приложение, вам важна экосистема (Spring Cloud, Spring AI, Security, Data), проще всего нанимать разработчиков. 20+ лет библиотек и документации — это аргумент, который сложно перебить.

Quarkus — если Kubernetes pod startup time или лимит по памяти это бизнес-требование. Quarkus делает build-time processing из коробки, GraalVM native-first, CDI-подход совместим с Jakarta EE. Разрыв в 4 раза по памяти под нагрузкой на облаке превращается в реальные деньги при 100+ подах.

Micronaut — если вы в serverless (Lambda, Cloud Functions) или вам критически важна надёжность native image. Compile-time DI означает ноль рефлексии в рантайме — это убирает главную причину сбоев при сборке в native. Micronaut 5.0 вышел в мае 2026, так что ветка 4.x всё ещё актуальна для большинства.

Что JDK 27 меняет для всех троих

JDK 27 приносит девять фич, и несколько из них напрямую затрагивают микросервисные рантаймы:

  • JEP 534: Compact Object Headers — заголовки объектов становятся компактнее по умолчанию. Меньше метаданных на объект — меньше потребление памяти в GC-куче. Это важно для всех, кто работает на JVM с большим количеством мелких объектов.
  • JEP 527: Post-Quantum Hybrid Key Exchange для TLS 1.3 — включён по умолчанию. Для сервисов, которые ходят во внешние API или работают в regulated-индустрии, это уже не future-proofing, а актуальное требование.
  • JEP 533: Structured Concurrency (седьмой preview) — новый тип ExecutionException и обновлённый Joiner. Если вы уже используете StructuredTaskScope — обновите обработку ошибок.
  • JEP 535: JFR In-Process Data Redaction — чувствительные данные из command-line и environment variables убираются из flight recordings до выхода из процесса. Важно для compliance.

Все три фреймворка уже поддерживают JDK 27 в nightly-сборках. GA 15 сентября — неделя с хвостиком.

Стоит ли мигрировать с Spring Boot

Короткий ответ: нет, если у вас работает и команда не страдает. Переход с Spring Boot на Quarkus ради 3х по памяти имеет смысл только при наличии конкретной проблемы — жёсткие K8s-лимиты, serverless cold start, cost reduction на масштабе.

Если вы стартуете новый сервис и знаете, что он будет в Kubernetes с ограничениями — имеет смысл сразу смотреть в Quarkus. Если у вас облако и serverless — Micronaut. Для всего остального Spring Boot 3.4 + JDK 25 LTS — это всё ещё наиболее прагматичный выбор.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *