Pärast kuue kuu arendustöö on Oracle välja andnud Java SE 20 platvormi (Java Platform, Standard Edition 20), mille etalonrakenduseks on avatud projekti OpenJDK kasutamine. Vaatamata mõnede aegunud võimaluste eemaldamisele säilitab Java SE 20 tagurpidi ühilduvuse varasemate Java versioonidega — enamik varem kirjutatud Java projekte töötab uue versiooni all muutusteta. Paigaldusvalmis Java SE 20 kogumid (JDK, JRE ja Server JRE) on ette valmistatud Linuxile (x86_64, AArch64), Windowsile (x86_64) ja macOS-ile (x86_64, AArch64). OpenJDK projekti raames välja töötatud Java 20 etalonrakendus on täielikult avatud GPLv2 litsentsi alusel koos GNU ClassPath eranditega, mis lubavad dünaamilist sidumist kommertsproduktidega.
Java SE 20 kuulub tavapärase toetuse perioodi all olevate väljaannete hulka, mille uuendusi antakse välja järgmise väljaande ilmumiseni. Pikaajalise toetuse (LTS) jaoks tuleks kasutada Java SE 17, mille uuendusi antakse välja kuni 2029. aastani. Tuletame meelde, et alates Java 10 väljaandest on projekt läinud uuele arendusprotsessile, mis hõlmab lühemat uute väljalaskeketide tsüklit. Uut funktsionaalsust arendatakse nüüd pidevalt uuendatavamas master-haru, kuhu lisatakse juba valmis muudatused ja kust kuue kuu tagant hargnevad harud uute väljalaskete stabiliseerimiseks.
Java 20 uuendustes võib välja tuua:
- Pakutakse piiratud väärtuste (Scoped Values) eeltoetust, mis võimaldavad jagada muutumatuid andmeid voogudes ja tõhusalt vahetada andmeid alavoogude vahel (väärtused pärinevad). Scoped Values arenevad välja voogude kohalike muutuja (thread-local variables) mehhanismi asendamiseks ning on tõhusamad, kui kasutatakse väga suurt arvu virtuaalseid voogusid (tuhandeid ja miljoneid vooge). Peamine erinevus Scoped Values'i ja kohalike muutuja vahel on see, et esimesed salvestatakse ainult üks kord, neid ei saa hiljem muuta ja need jäävad kättesaadavaks ainult voolu täitmise ajaks. 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(…); } }
- Lisatud on teine prooviversioon salvestusmallide (record pattern) jaoks, mis laiendab Java 16-s introduceeritud võimalust kasutada väliandmete mustrite https:// www.oracle.com/tehnikamuutmete/uue-põlvkonna-rakenduste-projekti-asanew-projects-a/new-monitor-rolling-releases-asu-rollin-asu-rollin-asu-new-monitor-rolling-resourcen-a-välja-andmised-pärimine (record). Näiteks: 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); } }
- Lisatud on neljas prooviversioon mustri uue rakenduse avaldumiseks «switch», mis võimaldab «case» siltidel kasutada mitte täpseid väärtusi, vaid paindlikke malli, mis katab kohe seriaali väärtusi, mille jaoks oli varem vaja kasutada mahukaid tingimuslauseid «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(); }; }
- Lisatud on teine prooviversioon API FFM (Foreign Function & Memory), mis võimaldab Java-programmidel suhelda välise koodi ja andmetega, kutsudes funktsioone välistest teekidest ja pääsemiseks JVM-ist väljastpoolt.
- Lisatud on teine eelnõu virtuaalsetest voogudest, mis on kerged vood, oluliselt lihtsustades kõrge jõudlusega mitme lõimega rakenduste kirjutamist ja hooldamist.
- Lisatud on teine variant eksperimentaalsest API-st struktureeritud paralleelsuse jaoks, mis lihtsustab mitme lõimega rakenduste arendamist, võimaldades töödelda mitmeid ülesandeid, mis on täidetud erinevates voogudes, nagu ühtset plokki.
- Lisatud on viies eelnõu API Vectorist, mis pakub funktsioone vektorkalkulatsioonide jaoks, mis toimuvad x86_64 ja AArch64 protsessorite vektorinstruktsioonide abil ning võimaldavad korraga rakendada operatsioone mitmele väärtusele (SIMD). Erinevalt HotSpot JIT-kõmbliku pakutavatest automaatvektorimise võimalustest skalaartöötluse jaoks, annab uus API võimaluse selgelt hallata vektoriseerimist andmete paralleelse töötlemise jaoks.
Allikas: opennet.ru
