Издание на 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). Референтната реализация на Java 18, разработена в рамките на проекта OpenJDK, е напълно отворена под лицензия 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 и подобни на сервлети обработчици не се поддържат). Вграденото 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster