Utgivning av Java SE 20

Efter sex mĂ„naders utveckling har företaget Oracle slĂ€ppt plattformen Java SE 20 (Java Platform, Standard Edition 20), dĂ€r den referensimplementationen Ă€r det öppna projektet OpenJDK. Med undantag för att vissa förĂ„ldrade funktioner har tagits bort, har Java SE 20 bibehĂ„llit bakĂ„tkompatibilitet med tidigare versioner av Java-plattformen — de flesta tidigare skrivna Java-projekt kommer att fungera utan Ă€ndringar nĂ€r de körs under den nya versionen. Klara installationspaket för Java SE 20 (JDK, JRE och Server JRE) har förberetts för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Den referensimplementation av Java 20, som har utvecklats inom ramen för OpenJDK-projektet, Ă€r helt öppen under GPLv2-licensen med undantag för GNU ClassPath, som tillĂ„ter dynamisk lĂ€nkning med kommersiella produkter.

Java SE 20 klassificeras som en version med vanlig support, dÀr uppdateringar kommer att slÀppas fram till nÀsta version. För lÄngsiktig support (LTS) bör Java SE 17 anvÀndas, vars uppdateringar kommer att slÀppas fram till 2029. Som pÄminnelse har projektet sedan inkluderandet av Java 10 övergÄtt till en ny utvecklingsprocess, vilket innebÀr en kortare cykel för att skapa nya versioner. Ny funktionalitet utvecklas nu i en konstant uppdaterad mastergren, dÀr fÀrdiga Àndringar inkluderas och som fÄr avgreningar för stabilisering av nya versioner var sjÀtte mÄnad.

Bland nyheterna i Java 20 kan följande nÀmnas:

  • Förslagen preliminĂ€r support av begrĂ€nsade vĂ€rden (Scoped Values) möjliggör delning av oförĂ€nderliga data inom trĂ„dar och effektiv datadelning mellan undertrĂ„dar (vĂ€rden Ă€rvda). Scoped Values utvecklas för att ersĂ€tta mekanismen för trĂ„d-lokala variabler (thread-local variables) och Ă€r mer effektiva nĂ€r man anvĂ€nder ett mycket stort antal virtuella trĂ„dar (tusentals och miljontals trĂ„dar). Den viktigaste skillnaden mellan Scoped Values och trĂ„d-lokala variabler Ă€r att de förstnĂ€mnda skrivs en gĂ„ng, kan inte Ă€ndras dĂ€refter och förblir tillgĂ€ngliga endast under trĂ„dens körning. 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(
); } }
  • En andra preliminĂ€r implementation av rekordmönster (record pattern) har lagts till, vilket utökar den funktion som introducerades i Java 16 för att matcha mönster med hjĂ€lp av klassvĂ€rden av typen record. Till exempel: 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); } }
  • En fjĂ€rde preliminĂ€r implementation av mönstermatchning i switch-uttryck har lagts till, vilket gör att flexibla mönster kan anvĂ€ndas i case-etiketter istĂ€llet för exakta vĂ€rden, vilket tidigare krĂ€vde skrymmande kedjor av if...else-uttryck. 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(); }; }
  • En andra preliminĂ€r implementation av FFM API (Foreign Function & Memory) har lagts till, vilket möjliggör interaktion mellan Java-program och extern kod och data genom att anropa funktioner frĂ„n externa bibliotek och fĂ„ Ă„tkomst till minne utanför JVM.
  • En andra preliminĂ€r implementation av virtuella trĂ„dar har lagts till, vilket Ă€r lĂ€tta trĂ„dar som avsevĂ€rt förenklar skrivandet och underhĂ„llet av högpresterande flertrĂ„dade tillĂ€mpningar.
  • En andra version av det experimentella API:t för strukturerad parallellism har lagts till, vilket förenklar utvecklingen av flertrĂ„dade program genom att behandla flera uppgifter som körs i olika trĂ„dar som en enhetlig block.
  • Den femte preliminĂ€ra implementationen av API:et Vector har lagts till, vilket tillhandahĂ„ller funktioner för vektorberĂ€kningar som utförs med hjĂ€lp av vektoriseringsinstruktioner frĂ„n x86_64 och AArch64-processorer och möjliggör samtidig tillĂ€mpning av operationer pĂ„ flera vĂ€rden (SIMD). Till skillnad frĂ„n de funktioner som erbjuds av JIT-kompilatorn HotSpot för automatisk vektorisering av skalĂ€ra operationer, ger den nya API:n möjlighet att explicit styra vektoriseringen för parallell databehandling.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster