Ну вот, 2022-й год начался. Пока у большинства еще новогодние каникулы с шампанским и оливье, мы будем говорить о трендах в мире Java. Возможно, это поможет вам проанализировать свою карьеру, выучить новую технологию или придумать план развития на наступивший год. Тренды Java в 2022 году: JDK 18 и 19, Project Loom и Data mesh - 1Специалист по языку Java и лектор Андрей Родионов, а также архитектор решений в EPAM и глава программного комитета Devoxx Ukraine Олег Цаль-Цалько рассказали о том, что ждет Java в 2022 году и ближайшем будущем.

Каковы перспективы Java в 2022 году?

Тренды Java в 2022 году: JDK 18 и 19, Project Loom и Data mesh - 2В этом году ожидаем выхода двух следующих версий JDK 18 (в марте) и JDK 19 (в сентябре). Из потенциально интересного для большинства Java-разработчиков в JDK 18 может быть:
  • Встроенный Simple Web Server, без поддержки сервлет-контейнера, который можно будет использовать для быстрого прототипирования и тестирования, по аналогии с аналогичными мини веб-серверами в Python, Ruby, PHP.
  • Продолжающий совершенствоваться pattern matching.
Что касается JDK 19, уже есть Early-Access Build, но еще нет официального списка, что же в него планируется включить. Хочется верить, что в JDK 19, по крайней мере, войдет первый стабильный прототип Project Loom, для которого недавно появились проекты спецификаций и чья последняя сборка базируется на JDK 19. О Project Loom мы еще поговорим детальнее ниже.

Для каких сфер Java остается безальтернативным решением, где она предпочтительна?

Андрей Родионов:

К счастью, нельзя говорить о безальтернативности Java для какой-либо из сфер, но можно говорить о Java как о некой золотой середине для разработки enterprise приложений, бэкенда и микросервисов. Стоит также отметить увеличивающееся количество разных дистрибутивов JDK от разных вендоров (кроме Oracle): Amazon, Microsoft, Alibaba, Red Hat, Bellsoft (основанная выходцами из Центра Разработок Oracle в Санкт-Петербурге) и другие. Полный набор дистрибутивов доступен по ссылке. Тренды Java в 2022 году: JDK 18 и 19, Project Loom и Data mesh - 3Альтернативы всегда есть, но наибольшее применение Java находит на backend в enterprise разработке. Большинство больших компаний выбирают Java для своих больших и сложных систем. Причины все те же: количество разработчиков и экспертизы на рынке, огромная экосистема и мощная JVM платформа.

Какие перспективы у других jvm языков, в частности, у Kotlin, по сравнению c Java?

Андрей Родионов:

Чтобы понять какие из JVM-языков популярны, достаточно открыть документацию по Spring, Micronaut, Vert.x и посмотреть, на каких языках приводятся примеры кода – общими будет Java и Kotlin. Нельзя сказать, что наблюдается массовый переход проектов на Kotlin, но его популярность для бэкенда продолжает расти и множество фреймворков старается его включить в свою экосистему. Что касается Scala, то выходят и ее новые версии, и она дальше активно используется для ML, data processing и там, где более удобной является функциональная парадигма программирования.

Олег Цаль-Цалько:

Другие JVM-языки достаточно привлекательные и в наше время вполне нормально, когда на проекте используются несколько языков программирования. Мне кажется, причины того, почему новомодные JVM-языки не могут потеснить Java, такие:
  • Они не настолько круче, чтобы все прямо взяли и перешли на них.
  • Они используются в том же сегменте, что и Java.
  • Java понемногу берет все лучшее от других языков и становится лучше.

Будет ли падение качества Java в связи с более короткими межрелизными интервалами?

Олег Цаль-Цалько:

Думаю, что нет. По крайней мере, сейчас я могу выделить больше позитива от частых релизов. Мы видим, что новые клевые фичи появляются намного чаще. Теперь не надо ждать 5 лет, чтобы в языке появилось что-то новое. Само собой теперь не стоит ожидать таких грандиозных релизов, как Java 8, потому что фичи теперь появляются маленькими итерациями.

Есть ли фичи в новых версиях Java, которые особенно важны для разработчиков?

Олег Цаль-Цалько:

В последних версиях Java появилось несколько интересных фич, таких как Pattern Matching, Sealed Classes и Records. Я бы рекомендовал посмотреть на их возможности. Конечно, наиболее серьезные и ожидаемые фичи планируются в рамках Project Loom и Project Valhalla, но я думаю, что фичи в рамках этих проектов тоже будут релизиться постепенно.

Фреймворк Spring: будет ли он и дальше множить свою экосистему под разнообразные потребности?

Андрей Родионов:

Что касается Spring Framework, то его разработка была сосредоточена на поддержке разных возможностей Spring Cloud и возможности компиляции Spring Boot в нативные бинарные файлы – проект Spring Native, который планируется в будущем сделать частью Spring Core. В этом плане Spring отставал от Micronaut и Quarkus из-за активного использования reflection и динамической кодогенерации. Что касается Spring Framework 6, советую посмотреть доклад Spring 6 and Beyond Что нового в Spring Framework 6? с конференции Joker (от Олега Докуки и Алексея Нестерова). Из ключевого – переход на JDK 17, отказ от XML Configuration и Autowire через сеттеры, дальнейшее развитие поддержки Kotlin и проекта Spring Fu.

Олег Цаль-Цалько:

Spring как самый популярный Java FW в наше время не хочет отдавать пальму первенства. Я уверен, что команда разработчиков будет прилагать все усилия к развитию Spring. Spring заполняет все новые и новые ниши. Например, Spring сделал очень много в области Reactive Streams / Reactive Programming со своим Project Reactor. Теперь они продвигают RSoket protocol, что тоже выглядит многообещающе.

Расскажите о проекте Loom: для чего нужен, какие проблемы решает?

Андрей Родионов:

Project Loom – это, наверное, самое интересное новшество, которое может стать новым тектоническим сдвигом всей JVM-платформы и всех языков поверх JVM. Project Loom может не затронет так сильно обычных разработчиков, но точно повлияет на всю экосистему, библиотеки, фреймворки, другие JVM-языки использующие многопоточность. Project Loom вводит новую абстракцию потоков – virtual threads (аналог корутин). Если раньше Java thread был непосредственно привязан к потоку операционной системы (ОС), и создание нового потока в Java приводило к созданию нового потока ОС, то с virtual threads эта связь один-к-одному разрывается. При создании нового виртуального потока не будет создаваться новый потока ОС, а для выполнения непосредственных вычислений будет переиспользоваться один из так называемых carrier thread (некий аналог пула потоков ОС). Таким образом, поверх одного потока ОС может работать несколько виртуальных потоков. Для вычислительных задач такая модель виртуальных потоков не дает никаких преимуществ, и скорее замедляет скорость вычислений, но для блокирующих операций, типа обработки HTTP-запросов, ожидания ответов от БД или от микросервисов данная модель будет существенным плюсом. Дело в том, что при теперешней модели потоков блокировка/ожидание Java thread приводила к простою потока ОС, – это было тратой ресурсов и требовало создавать больше потоков ОС. В модели с виртуальными потоками, блокировка/ожидание виртуального потока приведет к тому, что будет освобождаться carrier thread, поверх которого работал виртуальный поток, и на нем будет запускаться другой виртуальный поток. Таким образом, потоки ОС будут использоваться более оптимально, и потребуется их меньшее количество для выполнения аналогичных задач. Соответственно, производители библиотек, фреймворков и JVM-языков должны будут адаптировать код под виртуальные потоки. Поэтому для них грядет большое переписывание :) Кроме модели виртуальных потоков, также планируется привнести и новый API для упрощения оркестрации потоков – так называемый structured concurrency. Сейчас, к примеру, structured concurrency активно используется в Kotlin-корутинах и Scala ZIO. К сожалению, версия JDK и даже год выхода Project Loom пока неизвестны. На вопрос о дате выхода главный архитектор Java-платформы Брайан Гетц отвечает философской фразой: ”It will be ready, when it will be ready”. Поэтому ждем и можем пробовать экспериментальные сборки Project Loom.

Олег Цаль-Цалько:

Loom – это большой umbrella project, в рамках которого команда OpenJDK и Oracle работает над Concurrency нововведениями в Java и JVM: virtual threads, fibers и continuations. Скорее всего, релиз этих фичей будет постепенный. На данный момент есть только Early Access builds для Virtual threads supports. Если говорить конкретно о virtual threads, его основная цель – упрощение многопоточной модели разработки в Java с помощью использования миллиона легковесных потоков с той же семантикой, как и у обычных платформенных потоков. Под капотом эти потоки будут менеджиться внутри ForkJoinPool и переиспользовать платформенные потоки.

Какие прогнозы развития Java в мире глобальных трендов – микросервисов, облачной архитектуры, блокчейна, ИИ?

Андрей Родионов:

Если говорить, о глобальных трендах, то они не особо изменились. По-прежнему основным трендом продолжает оставаться Kubernetes и инфраструктура вокруг него в виде Service mesh. Набирает также популярность Data mesh, как некая абстракция для управления распределенными источниками и хранилищами данных.