Випуск Java SE 18

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

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

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

  • За замовчуванням задіяно кодування UTF-8. Java API, що обробляє текстові дані з урахуванням кодування символів, тепер будуть використовувати UTF-8 на всіх платформах, незалежно від системних налаштувань і виставленої локалі. Для повернення старої поведінки, в якій кодування вибирається з урахуванням системної локалі, можна використовувати параметр "-Dfile.encoding=COMPAT".
  • До складу включено пакет com.sun.net.httpserver, у яких входить утиліта jwebserver та бібліотечний API з реалізацією простого http-сервера для віддачі статичного контенту (CGI та servlet-подібні обробники не підтримуються). Вбудований http-сервер не оптимізований для робочих навантажень і не підтримує керування доступом та автентифікацію, оскільки націлений головним чином на використання в процесі розробки для створення прототипів, налагодження та тестування проектів.
  • У JavaDoc реалізована підтримка тега @snippet для вбудовування робочих прикладів і фрагментів коду в документацію на API, до яких можна застосовувати засоби для перевірки коректності, підсвічування синтаксису та інтеграції з IDE.
  • Перероблено реалізація API java.lang.reflect (Core Reflection), призначеного для отримання інформації про методи, поля та контруктори класів, а також доступу до внутрішньої структури класів. Сам API java.lang.reflect залишився незмінним, але тепер реалізований через використання дескрипторів методів (method handles), що надаються модулем java.lang.invoke, замість застосування генераторів байткоду. Зміна дозволила уніфікувати реалізації java.lang.reflect та java.lang.invoke та спростити їх супровід.
  • Запропоновано третю попередню реалізацію API Vector, що надає функції для векторних обчислень, які виконуються з використанням векторних інструкцій процесорів x86_64 і AArch64 і дозволяють одночасно застосувати операції відразу до кількох значень (SIMD). На відміну від можливостей з автовекторизації скалярних операцій, що надаються в JIT-компіляторі HotSpot, новий API дає можливість явно керувати векторизацією для паралельної обробки даних.
  • Доданий SPI-інтерфейс (service-provider interface) для резолвінгу імен хостів та IP-адрес, що дозволяє задіяти в java.net.InetAddress альтернативні резолвери, не прив'язані до обробників, запропонованих операційною системою.
  • Запропоновано другу попередню реалізацію API Foreign Function & Memory, за допомогою якої програми можуть взаємодіяти з кодом та даними, що знаходяться за межами Java runtime. Новий API дозволяє ефективно викликати функції, що виконуються не JVM, і звертатися до пам'яті, не керованої JVM. Наприклад, можна викликати функції із зовнішніх бібліотек, що розділяються, і звертатися до даних процесу без використання JNI.
  • Додана друга експериментальна реалізація зіставлення за шаблоном у виразах «switch», що дозволяє в мітках «case» використовувати не точні значення, а гнучкі шаблони, що охоплюють одночасно серію значень, котрим раніше доводилося використовувати громіздкі ланцюжки виразів «if…else». Object o = 123L; String formatted = switch(o) { 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(); };
  • Оголошено застарілим і буде відключено в одному з наступних випусків механізм фіналізації, а також пов'язані з ним методи, такі як Object.finalize(), Enum.finalize(), Runtime.runFinalization() та System.runFinalization().
  • У збирачах сміття ZGC (Z Garbage Collector), SerialGC та ParallelGC реалізовано підтримку дедуплікації рядків.

Джерело: opennet.ru

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