Java SE 20 release

Efter sex månaders utveckling har Oracle släppt plattformen Java SE 20 (Java Platform, Standard Edition 20), som använder OpenJDK open source-projektet som referensimplementering. Med undantag för borttagningen av vissa föråldrade funktioner, bibehåller Java SE 20 bakåtkompatibilitet med tidigare versioner av Java-plattformen – de flesta tidigare skrivna Java-projekt kommer fortfarande att fungera utan ändringar när de körs under den nya versionen. Installationsfärdiga versioner av Java SE 20 (JDK, JRE och Server JRE) är förberedda för Linux (x86_64, AArch64), Windows (x86_64) och macOS (x86_64, AArch64). Utvecklad av OpenJDK-projektet är Java 20-referensimplementeringen helt öppen källkod under GPLv2-licensen med GNU ClassPath-undantag för att tillåta dynamisk länkning till kommersiella produkter.

Java SE 20 kategoriseras som en vanlig supportversion, med uppdateringar som ska släppas innan nästa release. Långtidsstödsgrenen (LTS) bör vara Java SE 17, som kommer att få uppdateringar fram till 2029. Kom ihåg att från och med lanseringen av Java 10 bytte projektet till en ny utvecklingsprocess, vilket innebär en kortare cykel för bildandet av nya utgåvor. Ny funktionalitet utvecklas nu i en ständigt uppdaterad mastergren, som innehåller redan genomförda ändringar och från vilken filialer förgrenas var sjätte månad för att stabilisera nya releaser.

Nya funktioner i Java 20 inkluderar:

  • Det finns preliminärt stöd för Scoped Values, vilket gör att oföränderlig data kan delas över trådar och data utbytas effektivt mellan underordnade trådar (värden ärvs). Omfattningsvärden utvecklas för att ersätta mekanismen för trådlokala variabler och är mer effektiva när man använder ett mycket stort antal virtuella trådar (tusentals eller miljontals trådar). Huvudskillnaden mellan Scoped Values ​​och trådlokala variabler är att de förstnämnda skrivs en gång, inte kan ändras i framtiden och förblir endast tillgängliga under den tid tråden körs. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN: GÄST); var användare = ny användare(nivå); ScopedValue.where(CURRENT_USER, användare).run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) kastar ny InvalidUserException(); returnera ny DBConnection(...); } }
  • En andra förhandsvisning av rekordmönster har lagts till, vilket utökar mönstermatchningsfunktionen introducerad i Java 16 för att analysera värdena för rekordklasser. Till exempel: record Point(int x, int y) {} static void printSum(Object obj) { if (obj-instans av punkt p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • En fjärde preliminär implementering av mönstermatchning i "switch"-satser har lagts till, vilket gör att "case"-etiketter inte kan använda exakta värden, utan flexibla mönster som täcker en serie värden på en gång, för vilka det tidigare var nödvändigt att använda besvärliga kedjor av "om ... annat" uttryck. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Lång l -> String.format("lång %d", l); case Dubbel d -> String.format("dubbel %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • En andra preliminär implementering av FFM (Foreign Function & Memory) API har lagts till, vilket gör att du kan organisera interaktionen av Java-program med extern kod och data genom att anropa funktioner från externa bibliotek och komma åt minne utanför JVM.
  • En andra förhandsvisning av virtuella trådar har lagts till, som är lätta trådar som avsevärt förenklar skrivning och underhåll av högpresterande flertrådiga applikationer.
  • Lade till ett andra experimentellt API för strukturerad parallellism, vilket förenklar utvecklingen av flertrådade applikationer genom att behandla flera uppgifter som körs i olika trådar som ett enda block.
  • En femte förhandsvisning av Vector API har lagts till, som tillhandahåller funktioner för vektorberäkningar som utförs med hjälp av vektorinstruktioner på x86_64- och AArch64-processorer och tillåter operationer att tillämpas samtidigt på flera värden (SIMD). Till skillnad från funktionerna i HotSpot JIT-kompilatorn för autovektorisering av skalära operationer, gör det nya API:et det möjligt att explicit styra vektorisering för parallell databehandling.

Källa: opennet.ru

Lägg en kommentar