Випуск Java SE 20

Після шести місяців розробки компанія Oracle випустила платформу Java SE 20 (Java Platform, Standard Edition 20), як еталонну реалізацію якої використовується відкритий проект OpenJDK. За винятком видалення деяких застарілих можливостей Java SE 20 збережена зворотна сумісність з минулими випусками платформи Java - більшість раніше написаних Java-проектів без змін будуть працездатні при запуску під керуванням нової версії. Готові для встановлення складання Java SE 20 (JDK, JRE та Server JRE) підготовлені для Linux (x86_64, AArch64), Windows (x86_64) та macOS (x86_64, AArch64). Розроблена в рамках проекту OpenJDK еталонна реалізація Java 20 повністю відкрита під ліцензією GPLv2 з винятками GNU ClassPath, що дозволяє динамічне зв'язування з комерційними продуктами.

Java SE 20 віднесений до категорії випусків із звичайним терміном підтримки, оновлення для якого будуть випускатися до наступного випуску. Як гілка з тривалим терміном підтримки (LTS) слід використовувати Java SE 17, оновлення для якого будуть випускатися до 2029 року. Нагадаємо, що починаючи з випуску Java 10 проект перейшов на новий процес розробки, який передбачає більш короткий цикл формування нових релізів. Нова функціональність тепер розвивається в одній master-гілці, що постійно оновлюється, в яку включаються вже готові зміни і від якої раз на шість місяців відгалужуються гілки для стабілізації нових випусків.

З нововведень Java 20 можна відзначити:

  • Запропоновано попередню підтримку обмежених значень (Scoped Values), що дозволяють спільно використовувати незмінні дані в потоках та ефективно обмінюватися даними між дочірніми потоками (значення успадковуються). Scoped Values ​​розвиваються для заміни механізму змінних локальних до потоку (thread-local variables) і більш ефективні при використанні дуже великої кількості віртуальних потоків (тисячі та мільйони потоків). Головна відмінність Scoped Values ​​від змінних локальних до потоку в тому, що перші записуються один раз, надалі не можуть бути змінені і залишаються доступними лише на час виконання потоку. class Server { final static ScopedValue CURRENT_USER = новий ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = новий User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
  • Додана друга попередня реалізація шаблонів записів (record pattern), що розширює з'явилася в Java 16 можливість зіставлення зі зразком засобами для аналізу значень класів типу record. Наприклад: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Додана четверта попередня реалізація зіставлення за шаблоном у виразах "switch", що дозволяє в мітках "case" використовувати не точні значення, а гнучкі шаблони, що охоплюють відразу серію значень, для яких раніше доводилося використовувати громіздкі ланцюжки виразів "if ... else". static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format(«int %d», i); case Long l -> String.format(«long %d», l); case Double d -> String.format(«double %f», d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • Додана друга попередня реалізація API FFM (Foreign Function & Memory), що дозволяє організувати взаємодію Java-програм із зовнішніми кодом та даними через виклик функцій із зовнішніх бібліотек та доступ до пам'яті поза JVM.
  • Додано другу попередню реалізацію віртуальних потоків, що являють собою легковагові потоки, що значно спрощують написання та супровід високопродуктивних багатопотокових додатків.
  • Доданий другий варіант експериментального API для структурованого паралелізму, що спрощує розробку багатопотокових додатків за рахунок обробки декількох завдань, що виконуються в різних потоках, як єдиного блоку.
  • Додана п'ята попередня реалізація API Vector, що надає функції векторних обчислень, які виконуються з використанням векторних інструкцій процесорів x86_64 і AArch64 і дозволяють одночасно застосувати операції відразу до кількох значень (SIMD). На відміну від можливостей з автовекторизації скалярних операцій, що надаються в JIT-компіляторі HotSpot, новий API дає можливість явно керувати векторизацією для паралельної обробки даних.

Джерело: opennet.ru

Додати коментар або відгук