JavaRush /Java блог /Random UA /Тренди Java у 2022 році: JDK 18 та 19, Project Loom та Da...

Тренди Java у 2022 році: JDK 18 та 19, Project Loom та Data mesh

Стаття з групи Random UA
Ну ось, 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 порівняно з 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”. Тому чекаємо і можемо пробувати фреймворків і JVM-мов повинні адаптувати код під віртуальні потоки. Тому для них буде велике переписування :) Крім моделі віртуальних потоків, також планується привнести і новий API для спрощення оркестрації потоків - так званий structured concurrency. Зараз, наприклад, structured concurrency активно використовується в Kotlin-корутинах та Scala ZIO. На жаль, версія JDK і навіть рік виходу Project Loom поки що невідомі. На запитання про дату виходу головний архітектор Java-платформи Брайан Гетц відповідає філософською фразою: ”It will be ready”, when it will be ready”. Тому чекаємо і можемо пробувати фреймворків і JVM-мов повинні адаптувати код під віртуальні потоки. Тому для них буде велике переписування :) Крім моделі віртуальних потоків, також планується привнести і новий API для спрощення оркестрації потоків - так званий structured concurrency. Зараз, наприклад, structured concurrency активно використовується в Kotlin-корутинах та Scala ZIO. На жаль, версія JDK і навіть рік виходу Project Loom поки що невідомі. На запитання про дату виходу головний архітектор Java-платформи Брайан Гетц відповідає філософською фразою: ”It will be ready”, when it will be ready”. Тому чекаємо і можемо пробувати structured concurrency активно використовується в Kotlin-корутинах та Scala ZIO. На жаль, версія JDK і навіть рік виходу Project Loom поки що невідомі. На запитання про дату виходу головний архітектор Java-платформи Брайан Гетц відповідає філософською фразою: ”It will be ready”, when it will be ready”. Тому чекаємо і можемо пробувати 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 як абстракція для управління розподіленими джерелами і сховищами даних.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ