Java SE 20 release

Nei seis moannen fan ûntwikkeling hat Oracle it platfoarm Java SE 20 (Java Platform, Standard Edition 20) frijlitten, dat it OpenJDK-iepenboarne-projekt brûkt as referinsjeimplementaasje. Mei útsûndering fan it fuortheljen fan guon ferâldere funksjes, behâldt Java SE 20 efterútkompatibiliteit mei eardere releases fan it Java-platfoarm - de measte earder skreaune Java-projekten sille noch wurkje sûnder wiziging as se rinne ûnder de nije ferzje. Ynstalleare builds fan Java SE 20 (JDK, JRE, en Server JRE) binne taret foar Linux (x86_64, AArch64), Windows (x86_64), en macOS (x86_64, AArch64). Ûntwikkele troch it OpenJDK projekt, de Java 20 referinsje ymplemintaasje is folslein iepen ûnder de GPLv2 lisinsje mei GNU ClassPath útsûnderings om dynamyske keppele oan kommersjele produkten.

Java SE 20 is kategorisearre as in reguliere stiperelease, mei updates dy't moatte wurde frijlitten foar de folgjende release. De tûke foar lange termyn stipe (LTS) soe Java SE 17 wêze moatte, dy't updates sil ûntfange oant 2029. Tink derom dat begjinnend mei de frijlitting fan Java 10, it projekt oerstapt nei in nij ûntwikkelingsproses, wat in koartere syklus ymplisearret foar de foarming fan nije releases. Nije funksjonaliteit wurdt no ûntwikkele yn ien konstant bywurke mastertûke, dy't al foltôge wizigingen omfettet en wêrfan tûken elke seis moanne fertakke wurde om nije releases te stabilisearjen.

Nije funksjes yn Java 20 omfetsje:

  • Предложена предварительная поддержка ограниченных значений (Scoped Values), позволяющих совместно использовать неизменяемые данные в потоках и эффективно обмениваться данными между дочерними потоками (значения наследуются). Scoped Values развиваются для замены механизма переменных локальных к потоку (thread-local variables) и более эффективны при использовании очень большого числа виртуальных потоков (тысячи и миллионы потоков). Главное отличие Scoped Values от переменных локальных к потоку в том, что первые записываются один раз, в дальнейшем не могут быть изменены и остаются доступны только на время выполнения потока. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = new 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 = p.x(); int y = p.y(); 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 для cтруктурированного параллелизма, упрощающего разработку многопоточных приложений за счёт обработки нескольких задач, выполняемых в разных потоках, как единого блока.
  • Добавлена пятая предварительная реализация API Vector, предоставляющего функции для векторных вычислений, которые выполняются с использованием векторных инструкций процессоров x86_64 и AArch64 и позволяют одновременно применить операции сразу к нескольким значениям (SIMD). В отличие от предоставляемых в JIT-компиляторе HotSpot возможностей по автовекторизации скалярных операций, новый API даёт возможность явно управлять векторизацией для параллельной обработки данных.

Boarne: opennet.ru

Add a comment