Udgivelse af Java SE 23 og OpenJDK 23

Efter seks måneders udvikling har Oracle offentliggjort platformen Java SE 23 (Java Platform, Standard Edition 23), hvor den referenceimplementering, der anvendes, er det åbne projekt OpenJDK. Bortset fra fjernelse af nogle forældede funktioner i Java SE 23 er bagudkompatibilitet med tidligere versioner af Java-platformen bevaret — de fleste tidligere skrevne Java-projekter vil fungere uændret, når de kører på den nye version. Installationer af Java SE 22 (JDK, JRE og Server JRE) er tilgængelige for Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Den referenceimplementering af Java 23, der er udviklet under OpenJDK-projektet, er helt åben under GPLv2-licensen med undtagelser for GNU ClassPath, der tillader dynamisk binding til kommercielle produkter.

Java SE 23 klassificeres som en udgave med almindelig support, hvor opdateringer vil blive udgivet indtil næste udgave. For en langsigtet supportgren (LTS) anbefales det at bruge Java SE 21 eller Java SE 17, hvortil opdateringer udgives indtil henholdsvis 2031 og 2029 (offentligt tilgængelige — indtil 2028 og 2026). Den udvidede støtte til LTS-grenen Java SE 8 vil vare indtil 2030, og Java SE 11 indtil 2032.

Blandt de nye funktioner i Java SE 23:

  • Den generative garbage collector ZGC (Generational Z Garbage Collector) er nu aktiveret som standard, og den gør brug af adskilt behandling af "gamle" og "unge" objekter, hvilket øger effektiviteten ved rensning af nyligt oprettede objekter, der har en kort levetid. Anvendelsen af Generational ZGC reducerer risikoen for pauser under ressourceallokering, sænker CPU-belastningen og mindsker hukommelseforbruget ved garbage collection. Testning af Generational ZGC med Apache Cassandra 4 viste en firedobling af throughput ved en fast heap-størrelse og en reduktion af heap-størrelsen med en fjerdedel ved uændret throughput.
  • JavaDoc har fået support til brug af Markdown-notation til dokumentation af kode i kommentarer, som kan bruges i stedet for en blanding af HTML og JavaDoc @-tags.
    Udgivelse af Java SE 23 og OpenJDK 23
  • Mønstrene til matchning er udvidet med forudgående støtte til brug af primitive typer (int, byte, char og andre grundlæggende typer, der ikke er objekter) i alle slags skabeloner, i 'instanceof' operatoren og i 'switch' blokke. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "advarsel"; case 2 -> "fejl"; case int i -> "ukendt status: " + i; } if (i instanceof byte b) { … b … }
  • Der er tilføjet forudgående støtte til brug af udtrykket 'import module M' for at importere alle pakker, der eksporteres af den angivne modul. Ændringen forenkler betydeligt genbrug af modulbiblioteker, hvilket muliggør tilslutning af biblioteker og klasser uden at definere deres placering i pakkehierarkiet. For eksempel vil 'import module java.base' resultere i import af alle 54 pakker i modulen java.base, som tidligere skulle nævnes separat ('import java.io.*', 'import java.util.*' osv.).

    Den anden forudgående implementering af API Class-File til parsing, generation og transformation af Java-klassefiler er blevet foreslået. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith("debug"))) { classBuilder.with(ce); } } });

  • Den ottende forudgående implementering af API Vector, der tilbyder funktioner til vektorberegninger, som udføres ved hjælp af vektorinstruktioner fra x86_64 og AArch64 processorer, og som tillader at anvende operationer på flere værdier samtidigt (SIMD). I modsætning til de muligheder, der tilbydes af JIT-kompileren HotSpot til automatisk vektorisering af skalaroperationer, giver det nye API mulighed for eksplicit kontrol over vektorisering til parallel databehandling.
  • Klassen java.io.Console har fået tilføjet metoderne format, printf, readPassword og readLine til formatering, output og indlæsning af tekst under hensyntagen til den valgte lokalitet. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 torsdag
  • Den anden foreløbige implementering af den udvidede Stream API er tilføjet, som understøtter definitionen af brugerdefinerede mellemoperationer, der kan være nyttige, når de indbyggede mellemoperationer ikke er tilstrækkelige til den ønskede datatransformation. Brugerdefinerede behandlere tilsluttes ved hjælp af den nye mellemoperation Stream::gather(Gatherer), som behandler stream-elementer ved at anvende en brugerdefineret behandler. 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]]
  • Den tredje foreløbige implementering af implicit erklærede klasser og anonyme instanser af metoden «main» er tilføjet, hvor det er muligt at undgå public/static-erklæringer, overførslen af argument Arrays og andre entiteter relateret til klasseerklæringen. // tidligere public class HelloWorld { public static void main(String[] args) { System.out.println(«Hello world!»); } } // nu kan man void main() { System.out.println(«Hej, verden!»); }
  • Den anden foreløbige mulighed for at angive udtryk i konstruktører før kaldet til super(…) er blevet tilføjet. Dette bruges til udtrykkeligt at kalde konstruktøren af superklassen fra konstruktøren af den afledte klasse, hvis disse udtryk ikke refererer til den instans, der oprettes af konstruktøren. class Outer { void hello() { System.out.println(«Hej»); } class Inner { Inner() { hello(); super(); } } }
  • Den tredje foreløbige implementering af Scoped Values er tilføjet, hvilket muliggør deling af uforanderlige data i streams og effektiv udveksling af data mellem undertråde (værdierne arves). Scoped Values udvikles som en erstatning for trådlokale variabler og er mere effektive ved brugen af et meget stort antal virtuelle tråde (tusindvis og millioner af tråde). Den primære forskel mellem Scoped Values og trådlokale variabler er, at de førstnævnte kun skrives én gang, ikke kan ændres afterward og kun er tilgængelige under udførelsen af tråden.
  • Tredje preliminære version af API'et til struktureret konkurens (Structured Concurrency), som forenkler udviklingen af multitrådede applikationer ved at håndtere flere opgaver, der kører i forskellige tråde, som en enkelt enhed, har været tilbudt til test.
  • Adgangsmetoder til ekstern hukommelse (uden for JVM) leveret af klassen sun.misc.Unsafe er blevet erklæret forældede og planlagt til fjernelse. For tilgang til hukommelse uden for heap'en (off-heap) og interaktion med ekstern kode anbefales det at bruge API'erne VarHandle og FFM (Foreign Function & Memory).

Derudover kan det nævnes, at opdateringen af platformen til udvikling af applikationer med grafiske brugerflader, JavaFX 23, er blevet offentliggjort, og at JIT-kompilatoren GraalVM er blevet inkluderet i standardpakkerne i Oracle JDK 23.

En ny version af den universelle virtuelle maskine GraalVM er også blevet præsenteret, som understøtter kørsel af applikationer på JavaScript (Node.js), Python, Ruby, R, og forskellige sprog til JVM (Java, Scala, Clojure, Kotlin) samt sprog, der kan generere LLVM-bitkode (C, C++, Rust). Udover at støtte JDK 23, er der i den nye version blevet optimeret hukommelsesforbrug og størrelsen på eksekveringskoden, og der er implementeret fuld støtte til værktøjer til at integrere Python og WebAssembly i Java-kode ved hjælp af JIT-kompilering.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster