Post ses monatoj da disvolviĝo, Oracle publikigis la platformon Java SE 20 (Java Platform, Standard Edition 20), kiu uzas la malfermitkodan projekton OpenJDK kiel sian referencan efektivigon. Krom la forigo de kelkaj malrekomenditaj funkcioj, Java SE 20 konservas retrokongruecon kun antaŭaj eldonoj de la Java platformo — plej multaj antaŭe skribitaj Java projektoj funkcios senŝanĝe kiam ili funkcias sub la nova versio. Pretaj por instali versiojn de Java SE 20 (JDK, JRE kaj Server JRE) estas pretaj por... Linux (x86_64, AArch64), Windows (x86_64) kaj macOS (x86_64, AArch64). Disvolvita de la projekto OpenJDK, la Java 20 referenca efektivigo estas plene malfermfonteca sub la GPLv2-licenco kun la GNU ClassPath-escepto, kiu permesas dinamikan ligadon kun komercaj produktoj.
Java SE 20 estas klasifikita kiel ĝenerala subtena eldono kaj daŭre ricevos ĝisdatigojn ĝis la venonta eldono. La branĉo Long Term Support (LTS) devus esti Java SE 17, kiu daŭre ricevos ĝisdatigojn ĝis 2029. Ni memorigu vin, ke ekde la liberigo de Java 10, la projekto ŝanĝis al nova evoluprocezo, kio implicas pli mallongan ciklon por la formado de novaj eldonoj. Nova funkcieco nun estas evoluigita en unu konstante ĝisdatigita majstra branĉo, kiu inkluzivas pretajn ŝanĝojn kaj de kiuj branĉoj estas disbranĉigitaj ĉiujn ses monatojn por stabiligi novajn eldonojn.
Novaj funkcioj en Java 20 inkluzivas:
- Prepara subteno por Ampleksitaj Valoroj estas proponita, permesante la dividadon de neŝanĝeblaj datumoj tra fadenoj kaj efikan datuminterŝanĝon inter infanaj fadenoj (valoroj estas heredataj). Ampleksitaj Valoroj celas anstataŭigi la mekanismon de faden-lokaj variabloj kaj estas pli efikaj kiam oni uzas tre grandajn nombrojn da virtualaj fadenoj (miloj kaj milionoj da fadenoj). La ĉefa diferenco inter Ampleksitaj Valoroj kaj faden-lokaj variabloj estas, ke la unuaj estas skribitaj unufoje, ne povas esti ŝanĝitaj poste, kaj restas haveblaj nur dum la daŭro de la ekzekuto de la fadeno. 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(); se (!uzanto.povasMalfermi()) ĵetas novan MalvalidanUzanto-Escepton(); redonu novan DBKonekton(...); } }
- Dua prepara efektivigo de rekordaj ŝablonoj estis aldonita, etendante la ŝablonakordigan funkcion enkondukitan en Java 16 por analizi valorojn de rekordaj klasoj. Ekzemple: record Point(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); } }
- Kvara antaŭrigarda efektivigo de ŝablonakordigo en ŝaltilaj esprimoj estis aldonita, permesante al kazetikedoj uzi flekseblajn ŝablonojn, kiuj ampleksas serion de valoroj anstataŭ precizaj valoroj, kiuj antaŭe postulis maloportunajn ĉenojn de if-else deklaroj. 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(); }; }
- Dua prepara efektivigo de la FFM (Foreign Function & Memory) API estis aldonita, permesante al Java programoj interagi kun ekstera kodo kaj datumoj per alvoko de funkcioj el eksteraj bibliotekoj kaj aliro al memoro ekster la JVM.
- Dua prepara efektivigo de virtualaj fadenoj estis aldonita, kiuj estas malpezaj fadenoj kiuj multe simpligas la skribadon kaj prizorgadon de alt-efikecaj plurfadenaj aplikaĵoj.
- Dua versio de la eksperimenta API por strukturita paralelismo estis aldonita, simpligante la disvolvon de plurfadenaj aplikaĵoj traktante plurajn taskojn funkciantajn sur malsamaj fadenoj kiel unuopan unuon.
- Kvina prepara efektivigo de la Vektora API estis aldonita. Ĉi tiu API provizas funkciojn por vektoraj kalkuloj faritaj per vektoraj instrukcioj de procesoro x86_64 kaj AArch64 kaj permesas samtempan operacion sur pluraj valoroj (SIMD). Male al la aŭtomata vektorigo de skalaraj operacioj fare de la HotSpot JIT-kompililo, la nova API permesas eksplicitan kontrolon super vektorigo por paralela datumtraktado.
fonto: opennet.ru
