Java SE 20 väljalase

Pärast kuuekuulist arendustööd on Oracle välja andnud Java SE 20 (Java Platform, Standard Edition 20) platvormi, mis kasutab OpenJDK avatud lähtekoodiga projekti referentsrakendusena. Välja arvatud mõnede aegunud funktsioonide eemaldamine, säilitab Java SE 20 tagasiühilduvuse Java platvormi eelmiste väljalasetega – enamik varem kirjutatud Java-projekte töötab uue versiooniga käivitamisel endiselt ilma muudatusteta. Java SE 20 (JDK, JRE ja Server JRE) installitavad järgud on ette valmistatud Linuxi (x86_64, AArch64), Windowsi (x86_64) ja macOS-i (x86_64, AArch64) jaoks. OpenJDK projekti poolt välja töötatud Java 20 viiterakendus on täielikult avatud lähtekoodiga GPLv2 litsentsi alusel koos GNU ClassPathi eranditega, et võimaldada dünaamilist linkimist kommertstoodetega.

Java SE 20 liigitatakse tavapäraseks tugiväljalaseks, mille värskendused avaldatakse enne järgmist väljalaset. Pikaajalise toe (LTS) haru peaks olema Java SE 17, mis saab värskendusi kuni 2029. aastani. Tuletame meelde, et alates Java 10 väljalaskmisest lülitus projekt üle uuele arendusprotsessile, mis tähendab lühemat tsüklit uute väljaannete moodustamiseks. Uut funktsionaalsust arendatakse nüüd ühes pidevalt uuendatavas põhiharus, mis sisaldab juba tehtud muudatusi ja millest hargnevad harud iga kuue kuu tagant uute väljaannete stabiliseerimiseks.

Java 20 uute funktsioonide hulka kuuluvad:

  • Olemas on esialgne tugi Scoped Values'ile, mis võimaldab muutumatuid andmeid jagada lõimede vahel ja andmeid tõhusalt alamlõimede vahel vahetada (väärtused on päritud). Piiratud väärtused töötatakse välja, et asendada lõime kohalike muutujate mehhanismi ja need on tõhusamad, kui kasutatakse väga palju virtuaalseid lõime (tuhandeid või miljoneid lõime). Peamine erinevus ulatuse väärtuste ja lõime kohalike muutujate vahel on see, et esimesed kirjutatakse üks kord, neid ei saa tulevikus muuta ja need jäävad kättesaadavaks ainult lõime täitmise ajaks. class Server { lõplik staatiline ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = new Kasutaja(tase); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) viska uus InvalidUserException(); tagasta uus DBConnection(...); } }
  • Lisatud on teine ​​kirjemustrite eelvaade, mis laiendab Java 16-s kasutusele võetud mustrite sobitamise funktsiooni, et sõeluda kirjeklasside väärtusi. Näiteks: rekord Punkt(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); } }
  • Lisatud on "lüliti" lausetes mustrite sobitamise neljas eelrakendus, mis võimaldab "case" siltidel kasutada mitte täpseid väärtusi, vaid paindlikke mustreid, mis katavad korraga mitmeid väärtusi, mille jaoks varem oli vaja kasutada tülikat. "kui...muidu" väljendite ahelaid. staatiline Stringi vormindajaMusterSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("pikk %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); vaikimisi -> o.toString(); }; }
  • Lisatud on FFM (Foreign Function & Memory) API teine ​​eelrakendus, mis võimaldab korraldada Java-programmide interaktsiooni välise koodi ja andmetega, kutsudes funktsioone välistest raamatukogudest ja pääsedes juurde mälule väljaspool JVM-i.
  • Lisatud on teine ​​eelvaade virtuaalsetele lõimedele, mis on kerged lõimed, mis lihtsustavad oluliselt suure jõudlusega mitme lõimega rakenduste kirjutamist ja hooldamist.
  • Lisati teine ​​eksperimentaalne API struktureeritud paralleelsuse jaoks, mis lihtsustab mitme lõimega rakenduste arendamist, käsitledes mitut erinevates lõimedes töötavat ülesannet ühe plokina.
  • Lisatud on Vector API viies eelvaade, mis pakub funktsioone vektoriarvutuste jaoks, mida teostatakse vektorijuhiste abil x86_64 ja AArch64 protsessoritel ning võimaldab toiminguid üheaegselt rakendada mitmele väärtusele (SIMD). Erinevalt HotSpot JIT kompilaatoris pakutavatest võimalustest skalaaroperatsioonide automaatseks vektoriseerimiseks võimaldab uus API paralleelse andmetöötluse vektoriseerimist selgesõnaliselt juhtida.

Allikas: opennet.ru

Lisa kommentaar