Uitgave van Java SE 23 en OpenJDK 23

Na zes maanden ontwikkeling heeft Oracle het Java SE 23-platform (Java Platform, Standard Edition 23) gepubliceerd, waarvan de referentie-implementatie het open project OpenJDK gebruikt. Behalve de verwijdering van enkele verouderde mogelijkheden, behoudt Java SE 23 de backwards compatibility met eerdere versies van het Java-platform — de meeste eerder geschreven Java-projecten zullen zonder wijzigingen werken onder de nieuwe versie. Klaar voor installatie zijn de builds van Java SE 22 (JDK, JRE en Server JRE) voorbereid voor Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). De referentie-implementatie van Java 23, ontwikkeld binnen het OpenJDK-project, is volledig open onder de GPLv2-licentie met uitzonderingen van GNU ClassPath, die dynamisch linken met commerciële producten toestaan.

Java SE 23 valt onder de categorie versies met reguliere ondersteuning, waarvoor updates zullen worden uitgebracht tot de volgende release. Voor een langdurige ondersteuning (LTS) moet Java SE 21 of Java SE 17 worden gebruikt, waarvoor updates tot respectievelijk 2031 en 2029 zullen worden uitgebracht (openbaar tot 2028 en 2026). De uitgebreide ondersteuning van de LTS-tak Java SE 8 gaat door tot 2030, en Java SE 11 tot 2032.

Onder de nieuwigheden in Java SE 23:

  • De generatieve modus van de garbage collector ZGC (Generational Z Garbage Collector) is standaard ingeschakeld, die gebruikmaakt van gescheiden verwerking van 'oude' en 'jonge' objecten, wat de efficiëntie verbetert bij het opruimen van onlangs gemaakte objecten met een korte levensduur. Het gebruik van Generational ZGC vermindert de risico's van pauzes tijdens resourceallocatie, verlaagt de CPU-belasting en het geheugengebruik bij garbage collection. Tests met Generational ZGC en Apache Cassandra 4 toonden een vier keer hogere doorvoersnelheid bij een vaste heap-grootte en een vermindering van de heap-grootte met een kwart bij onveranderde doorvoersnelheid.
  • JavaDoc heeft ondersteuning toegevoegd voor het gebruik van Markdown-opmaak voor het documenteren van code in opmerkingen, die kan worden gebruikt in plaats van een mix van HTML en @-tags in JavaDoc.
    Uitgave van Java SE 23 en OpenJDK 23
  • De mechanismen voor patroonmatching zijn uitgebreid met voorlopige ondersteuning voor het gebruik van primitieve types (int, byte, char en andere basis types die geen objecten zijn) in alle soorten sjablonen, in de ‘instanceof’ operator en in ‘switch’ blokken. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
  • Er is voorlopige ondersteuning toegevoegd voor het gebruik van de enkele expressie ‘import module M’ om meteen alle pakketten te importeren die door de opgegeven module worden geëxporteerd. Deze wijziging vereenvoudigt het hergebruik van modulaire bibliotheken aanzienlijk, waardoor bibliotheken en klassen kunnen worden aangesloten zonder hun plaats in de pakket hiërarchie te definiëren. Bijvoorbeeld, het gebruik van ‘import module java.base’ resulteert in de import van alle 54 pakketten die deel uitmaken van het module java.base, die eerder afzonderlijk moesten worden genoemd (‘import java.io.*’, ‘import java.util.*’, enz.).

    Een tweede voorlopige implementatie van de Class-File API is voorgesteld voor het parseren, genereren en omzetten van Java klassebestanden. 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); } } });

  • Een achtste voorlopige implementatie van de Vector API is voorgesteld, die functionaliteiten biedt voor vectorberekeningen die worden uitgevoerd met behulp van de vectorinstructies van x86_64 en AArch64-processoren en die gelijktijdig bewerkingen op meerdere waarden (SIMD) mogelijk maken. In tegenstelling tot de mogelijkheden voor automatische vectorisatie van scalair operaties die door de HotSpot JIT-compiler worden geboden, geeft de nieuwe API de mogelijkheid om expliciet de vectorisatie voor parallelle gegevensverwerking te beheren.
  • Aan de java.io.Console klasse zijn de methods format, printf, readPassword en readLine toegevoegd voor het formatteren, afdrukken en lezen van tekst met inachtneming van de gekozen locale. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 jeudi
  • De tweede voorlopige implementatie van de uitbreidbare Stream API is toegevoegd, die de definitie van eigen tussenbewerkingen ondersteunt. Dit kan nuttig zijn in gevallen waarin de bestaande ingebouwde tussenbewerkingen niet voldoende zijn voor de gewenste gegevensomvorming. Eigen handlers worden aangesloten via de nieuwe tussenbewerkingsoperatie Stream::gather(Gatherer), die de elementen van de stream verwerkt door de opgegeven gebruikershandler toe te passen. 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]]
  • De derde voorlopige implementatie van impliciet gedefinieerde klassen en anonieme instanties van de 'main'-methode is toegevoegd, waarin het mogelijk is om zonder public/static declaraties, argumentenarrays en andere entiteiten die verband houden met de klasse-declaratie te werken. // vroeger public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // nu kan het void main() { System.out.println("Hello, World!"); }
  • De tweede voorlopige variant van de mogelijkheid is toegevoegd, waarmee het mogelijk is om in constructors expressies op te geven vóór het aanroepen van super(…), dat wordt gebruikt voor het expliciet aanroepen van de constructor van de bovenliggende klasse vanuit de constructor van de afgeleide klasse, zolang deze expressies niet verwijzen naar de instantie die door de constructor wordt aangemaakt. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • De derde voorlopige implementatie van Scoped Values is toegevoegd, die het mogelijk maakt om onveranderlijke gegevens in streams gezamenlijk te gebruiken en effectief gegevens tussen subthreads uit te wisselen (de waarden worden geërfd). Scoped Values worden ontwikkeld ter vervanging van het mechanisme van thread-local variables en zijn efficiënter bij het gebruik van een zeer groot aantal virtuele threads (duizenden en miljoenen threads). Het belangrijkste onderscheid tussen Scoped Values en thread-local variables is dat de eerste één keer worden geschreven, niet gewijzigd kunnen worden en alleen beschikbaar blijven tijdens de uitvoering van de thread.
  • De derde voorlopige versie van de API voor gestructureerde paralleliteit (Structured Concurrency) is voorgesteld voor testen. Deze versie vereenvoudigt de ontwikkeling van multithreaded applicaties door meerdere taken die in verschillende threads worden uitgevoerd als één enkel blok te verwerken.
  • De methoden voor toegang tot externe geheugens (buiten de JVM) die door de klasse sun.misc.Unsafe worden aangeboden, zijn verouderd verklaard en zullen worden verwijderd. Voor toegang tot geheugen buiten de heap (off-heap) en interactie met externe code wordt aanbevolen om de API VarHandle en de API FFM (Foreign Function & Memory) te gebruiken.

Bovendien kan de publicatie van de update voor het ontwikkelen van JavaFX 23-grafische applicaties worden vermeld, evenals de opname van de GraalVM JIT-compiler in Oracle JDK 23.

Ook is een nieuwe versie van de universele GraalVM-virtuele machine gepresenteerd, die de uitvoering van applicaties in JavaScript (Node.js), Python, Ruby, R, en elke taal voor de JVM (Java, Scala, Clojure, Kotlin) ondersteunt, evenals talen waarvoor LLVM-bincode kan worden gegenereerd (C, C++, Rust). Naast de ondersteuning voor JDK 23 is in deze nieuwe versie de optimalisatie van het geheugengebruik en de grootte van de uitvoerbare code gerealiseerd, en er is volledige ondersteuning geïmplementeerd voor het integreren van Python en WebAssembly in Java-code met behulp van JIT-compilatie.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster