Java SE 23 og OpenJDK 23 utgitt

Etter seks måneder med utvikling publiserte Oracle Java SE 23-plattformen (Java Platform, Standard Edition 23), som bruker åpen kildekode OpenJDK-prosjektet som referanseimplementering. Med unntak av fjerning av noen foreldede funksjoner, opprettholder Java SE 23 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 22 (JDK, JRE og Server JRE) er forberedt for Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Java 23-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 23 er klassifisert som en vanlig støtteutgivelse og vil fortsette å motta oppdateringer til neste utgivelse. Long Term Support (LTS)-grenen bør være Java SE 21 eller Java SE 17, som vil motta oppdateringer frem til henholdsvis 2031 og 2029 (vanligvis tilgjengelig til 2028 og 2026). Utvidet støtte for LTS-grenen til Java SE 8 vil vare til 2030, og Java SE 11 til 2032.

Blant de 23 innovasjonene som er foreslått i Java SE:

  • Den generative driftsmodusen til ZGC (Generation Z Garbage Collector) søppeloppsamleren er aktivert som standard, ved bruk av separat behandling av "gamle" og "unge" objekter, noe som øker effektiviteten ved å rydde opp nylig opprettede objekter med kort levetid. Bruk av Generational ZGC reduserer risikoen for stopp under ressursallokering, reduserer CPU-belastning og minneforbruk under søppelhenting. Testing av Generational ZGC med Apache Cassandra 4 viste en 4x økning i gjennomstrømning med en fast haugstørrelse og en kvart reduksjon i haugstørrelse med konstant gjennomstrømning.
  • JavaDoc har lagt til støtte for bruk av Markdown for å dokumentere kode i kommentarer, som kan brukes i stedet for en blanding av HTML og JavaDoc @-tagger.
    Java SE 23 og OpenJDK 23 utgitt
  • Mønstertilpasningsmekanismer har blitt forbedret med foreløpig støtte for bruk av primitive typer (int, byte, char og andre ikke-objekt grunnleggende typer) i alle slags maler, i "instanceof"-setningen og i "switch"-blokker. switch (x.getStatus()) { case 0 -> "okay"; sak 1 -> "advarsel"; sak 2 -> "feil"; case int i -> "ukjent status:" + i; } if (i forekomst av byte b) { … b … }
  • Lagt til foreløpig støtte for å bruke en enkelt "importmodul M"-setning for å importere alle pakker eksportert av en spesifisert modul samtidig. Endringen forenkler gjenbruken av modulære biblioteker betydelig, slik at du kan inkludere biblioteker og klasser uten å bestemme deres plass i pakkehierarkiet. Hvis du for eksempel spesifiserer "import module java.base" vil du importere alle 54 pakkene som er inkludert i java.base-modulen, som tidligere ville ha måttet nevnes separat ("import java.io.*", "import java.util.* " osv.).

    En annen foreløpig implementering av Class-File API er foreslått for å analysere, generere og konvertere Java-klassefiler. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce forekomst av MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);

  • Den åttende forhåndsvisningen av Vector API 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.
  • Lagt format, printf, readPassword og readLine-metoder til java.io.Console-klassen for å formatere, vise og lese tekst basert på den valgte lokaliteten. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", ny Dato()) 2024-mai-16 jeudi
  • En andre forhåndsvisningsimplementering av den utvidede Stream API er lagt til som støtter å definere dine egne mellomoperasjoner, noe som kan være nyttig i tilfeller der eksisterende innebygde mellomoperasjoner ikke er tilstrekkelig for ønsket datatransformasjon. Innfødte behandlere kobles til ved hjelp av den nye mellomoperasjonen Stream::gather(Gatherer), som behandler strømelementer ved å bruke en brukerspesifisert behandler på dem. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Lagt til en tredje foreløpig implementering av implisitt deklarerte klasser og ikke navngitte forekomster av "hoved"-metoden, som kan unnlate offentlige/statiske deklarasjoner, sende en rekke argumenter og andre enheter knyttet til en klasseerklæring. // var offentlig klasse HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // nå kan du annullere main() { System.out.println("Hei, verden!"); }
  • Lagt til en andre forhåndsvisning av en funksjon som lar konstruktører spesifisere uttrykk før de kaller super(...), brukes til å eksplisitt kalle en overordnet klasses konstruktør fra en arvet klasses konstruktør hvis disse uttrykkene ikke refererer til en forekomst opprettet av konstruktøren. klasse Ytre { void hello() { System.out.println("Hei"); } klasse Indre { Indre() { hallo(); super(); } } }
  • Lagt til en tredje forhåndsvisningsimplementering av 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.
  • En tredje forhåndsvisning av Structured Concurrency API har blitt foreslått for testing, og forenkler utviklingen av flertrådede applikasjoner ved å behandle flere oppgaver som kjører i forskjellige tråder som en enkelt blokk.
  • De eksterne minnetilgangsmetodene (utenfor JVM) levert av sun.misc.Unsafe-klassen er avviklet og planlagt for fjerning. For å få tilgang til off-heap-minne og samhandle med ekstern kode, anbefales det å bruke VarHandle API og FFM (Foreign Function & Memory) API.

I tillegg kan vi legge merke til publiseringen av en oppdatering til plattformen for å lage applikasjoner med det grafiske grensesnittet JavaFX 23 og inkluderingen av GraalVM JIT-kompilatoren i hoved Oracle JDK 23.

Også presentert er en ny utgivelse av den universelle virtuelle maskinen GraalVM, som støtter kjørende applikasjoner i JavaScript (Node.js), Python, Ruby, R, alle språk for JVM (Java, Scala, Clojure, Kotlin) og språk ​som LLVM-bitkode kan genereres (C , C++, Rust). I tillegg til å støtte JDK 23, optimaliserer den nye versjonen minneforbruket og størrelsen på kjørbar kode, og gir full støtte for verktøy for å bygge inn Python og WebAssembly i Java-kode ved hjelp av JIT-kompilering.

Kilde: opennet.ru

Legg til en kommentar