Java SE 20 utgivelse

Etter seks måneder med utvikling, ga Oracle ut Java SE 20 (Java Platform, Standard Edition 20), som bruker OpenJDK åpen kildekode-prosjektet som referanseimplementering. Med unntak av fjerning av noen foreldede funksjoner, opprettholder Java SE 20 bakoverkompatibilitet med tidligere utgivelser av Java-plattformen - de fleste tidligere skrevne Java-prosjekter vil fungere uten endringer når de kjøres under den nye versjonen. Klar til å installere bygg av Java SE 20 (JDK, JRE og Server JRE) er forberedt for Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Java 20-referanseimplementeringen er utviklet av OpenJDK-prosjektet og er fullstendig åpen kildekode under GPLv2-lisensen, med GNU ClassPath-unntak som tillater dynamisk kobling med kommersielle produkter.

Java SE 20 er klassifisert som en generell støtteutgivelse og vil fortsette å motta oppdateringer til neste utgivelse. Long Term Support (LTS)-grenen bør være Java SE 17, som vil fortsette å motta oppdateringer frem til 2029. La oss minne deg på at fra og med utgivelsen av Java 10, gikk prosjektet over til en ny utviklingsprosess, noe som innebar en kortere syklus for dannelsen av nye utgivelser. Ny funksjonalitet utvikles nå i én konstant oppdatert hovedgren, som inkluderer ferdige endringer og hvor grener forgrenes hvert halvår for å stabilisere nye utgivelser.

Nye funksjoner i Java 20 inkluderer:

  • Det er foreløpig støtte for Scoped Values, slik at uforanderlige data kan deles på tvers av tråder og data utveksles effektivt mellom underordnede tråder (verdier arves). Scoped Values ​​blir utviklet for å erstatte tråd-lokale variabler-mekanismen og er mer effektive når du bruker svært store antall virtuelle tråder (tusenvis eller millioner av tråder). Hovedforskjellen mellom Scoped Values ​​og trådlokale variabler er at de førstnevnte er skrevet én gang, ikke kan endres i fremtiden, og forblir bare tilgjengelige så lenge tråden kjøres. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN: GUEST); var bruker = ny bruker(nivå); ScopedValue.where(CURRENT_USER, bruker).run(() -> Application.handle(request, response)); } } klasse DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) kaster ny InvalidUserException(); returner ny DBConnection(...); } }
  • En andre forhåndsvisning av rekordmønstre er lagt til, og utvider mønstertilpasningsfunksjonen introdusert i Java 16 for å analysere verdiene til rekordklasser. For eksempel: 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 fjerde foreløpig implementering av mønstertilpasning i "switch"-setninger er lagt til, slik at "case"-etiketter ikke kan bruke eksakte verdier, men fleksible mønstre som dekker en serie verdier på en gang, som det tidligere var nødvendig å bruke tungvint for. kjeder av "hvis ... annet" uttrykk. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Heltall i -> String.format("int %d", i); kasus Lang l -> String.format("lang %d", l); kasus Dobbel d -> String.format("dobbel %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
  • En annen foreløpig implementering av FFM (Foreign Function & Memory) API er lagt til, som lar deg organisere samspillet mellom Java-programmer med ekstern kode og data gjennom å ringe funksjoner fra eksterne biblioteker og få tilgang til minne utenfor JVM.
  • En ny forhåndsvisning av virtuelle tråder er lagt til, som er lette tråder som i stor grad forenkler skriving og vedlikehold av høyytelses flertrådsapplikasjoner.
  • Lagt til en andre eksperimentell API for strukturert parallellisme, som forenkler utviklingen av flertrådede applikasjoner ved å behandle flere oppgaver som kjører i forskjellige tråder som en enkelt blokk.
  • En femte forhåndsvisning av Vector API er lagt til, og gir funksjoner for vektorberegninger som utføres ved hjelp av vektorinstruksjoner på x86_64- og AArch64-prosessorer og lar operasjoner brukes samtidig på flere verdier (SIMD). I motsetning til mulighetene gitt i HotSpot JIT-kompilatoren for autovektorisering av skalaroperasjoner, gjør det nye API-et det mulig å eksplisitt kontrollere vektorisering for parallell databehandling.

Kilde: opennet.ru

Legg til en kommentar