P pĂ€rast kuue kuu arendust, tĂ”i Oracle turule Java SE 20 (Java Platform, Standard Edition 20), mille ritualiseks rakenduseks on avatud projekti OpenJDK. VĂ€lja arvatud mĂ”ningate vananenud funktsioonide eemaldamine, on Java SE 20 tagurpidi ĂŒhilduv varasemate Java versioonidega â enamik varasematele Java projektidele on tĂ”rgeteta töökorras uue versiooni all. Java SE 20 (JDK, JRE ja Server JRE) installimise valmiduses olevad kogumikud on valmistatud Linuxile (x86_64, AArch64), Windowsile (x86_64) ja macOS-ile (x86_64, AArch64). OpenJDK projekti raames loodud Java 20 viidatud rakendus on tĂ€ielikult avatud GPLv2 litsentsi all koos GNU ClassPath eranditega, mis lubavad dĂŒnaamilist sidumist kaubandustoodetega.
Java SE 20 kuulub tavapĂ€rase toetuse ajaklassi, mille uuendusi antakse jĂ€rgmise vĂ€ljaandmiseni. Pikaajalise toe (LTS) haruna tuleks kasutada Java SE 17, mille uuendusi antakse vĂ€lja kuni 2029. aastani. Meelde tuletame, et alates Java 10 vĂ€ljaandmisest on projekt lĂ€inud ĂŒle uuele arendusprotsessile, mis tĂ€hendab lĂŒhemat uute vĂ€ljaannete tsĂŒklit. Uus funktsionaalsus areneb nĂŒĂŒd ĂŒhes pidevalt uuendatavas master-haras, kuhu lisatakse juba valminud muudatused ja millest eralduvad harud uute vĂ€ljaannete stabiliseerimiseks iga kuue kuu tagant.
Java 20 uudsustest vÔib mÀrkida:
- Eelnevalt on ette nĂ€htud piiratud vÀÀrtuste (Scoped Values) eeltoetused, mis vĂ”imaldavad jagada muutmatuid andmeid lĂ”imedes ja tĂ”husalt vahetada andmeid alamsĂ”lmedes (vÀÀrtused pĂ€rinevad). Scoped Values arenevad vĂ€lja, et asendada lĂ”ime kohalikke muutujaid (thread-local variables) ja on tĂ”husamad, kui kasutatakse vĂ€ga suurt arvu virtuaalseid lĂ”ime (tuhanded ja miljonid lĂ”imed). Peamine erinevus Scoped Values'i ja lĂ”ime kohalike muutujate vahel seisneb selles, et esimesed kirjutatakse ĂŒks kord, neid ei saa hiljem muuta ja need on kergesti kĂ€ttesaadavad ainult lĂ”ime tĂ€itmise ajal. 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 eelneval versioon salvestamisvormidest (record pattern), mis laiendab Java 16-s tutvustatud mudelipĂ”hise sobituse funktsionaalsust klasside salvestamisvormide vÀÀrtuste analĂŒĂŒsimiseks. 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 eelnevalt rakendatud mustri sobitamise versioon 'switch' lausetes, mis vĂ”imaldab juhtumite etiketis 'case' kasutada mitte tĂ€pseid vÀÀrtusi, vaid paindlikke mustreid, mis katab korraga mitu vÀÀrtust, mille jaoks varem oli vaja kasutada koormavaid 'ifâŠelse' avaldusi. 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 eelnevalt rakendatud FFM (Foreign Function & Memory) API, mis vÔimaldab Java programmide interaktsiooni vÀlise koodi ja andmetega, kutsudes vÀliste raamatukogude funktsioone ja pÀÀsedes ligi JVM-i vÀlist mÀlu.
- Lisatud on teine eelnÔu virtuaalsete voogude kohta, mis on kerged vood, oluliselt lihtsustades kÔrgtehnoloogiliste mitmeÔiguslike rakenduste kirjutamist ja hooldamist.
- Lisatud on teine katseversioon API-le struktureeritud paralleelsuse jaoks, mis lihtsustab mitmeĂ”iguslike rakenduste arendamist, kĂ€sitledes mitmeid ĂŒlesandeid, mis töötavad erinevates voogudes, ĂŒhtse plokina.
- Lisatud on viies eelnĂ”u API-le Vector, mis pakub vektorkalkulatsioonide funktsioone, mis toimuvad x86_64 ja AArch64 protsessorite vektorinstruktsioonide abil ning vĂ”imaldavad samaaegselt rakendada operatsioone mitme vÀÀrtuse (SIMD) peale. Erinevalt JIT-kompilaatore HotSpot pakutud vĂ”imalustest skalaarsĂŒsteemide automaatvektoriseerimiseks, vĂ”imaldab uus API selgelt juhtida vektoriseerimist andmete paralleelseks töötlemiseks.
Allikas: opennet.ru
