Java SE 18-Veröffentlichung

Nach sechs Monaten Entwicklungszeit hat Oracle die Plattform Java SE 18 (Java Platform, Standard Edition 18) veröffentlicht, die das Open-Source-Projekt OpenJDK als Referenzimplementierung verwendet. Mit Ausnahme der Entfernung einiger veralteter Funktionen behält Java SE 18 die Abwärtskompatibilität mit früheren Versionen der Java-Plattform bei – die meisten zuvor geschriebenen Java-Projekte funktionieren weiterhin ohne Änderungen, wenn sie unter der neuen Version ausgeführt werden. Installierbare Builds von Java SE 18 (JDK, JRE und Server JRE) sind für Linux (x86_64, AArch64), Windows (x86_64) und macOS (x86_64, AArch64) vorbereitet. Die vom OpenJDK-Projekt entwickelte Java 18-Referenzimplementierung ist vollständig Open Source unter der GPLv2-Lizenz mit GNU ClassPath-Ausnahmen, um eine dynamische Verknüpfung mit kommerziellen Produkten zu ermöglichen.

Java SE 18 wird als reguläres Support-Release kategorisiert, wobei Updates vor dem nächsten Release veröffentlicht werden. Der Long Term Support (LTS)-Zweig soll Java SE 17 sein, das bis 2029 Updates erhält. Denken Sie daran, dass das Projekt ab der Veröffentlichung von Java 10 auf einen neuen Entwicklungsprozess umgestellt hat, was einen kürzeren Zyklus für die Erstellung neuer Releases impliziert. Neue Funktionalitäten werden nun in einem ständig aktualisierten Master-Branch entwickelt, der bereits durchgeführte Änderungen einbezieht und von dem aus alle sechs Monate Branchs verzweigt werden, um neue Releases zu stabilisieren.

Zu den neuen Funktionen in Java 18 gehören:

  • Standardmäßig ist die Kodierung UTF-8. Java-APIs, die Textdaten auf Basis der Zeichenkodierung verarbeiten, verwenden jetzt auf allen Plattformen standardmäßig UTF-8, unabhängig von Systemeinstellungen und Gebietsschemaeinstellungen. Um zum alten Verhalten zurückzukehren, bei dem die Kodierung basierend auf dem Gebietsschema des Systems ausgewählt wird, können Sie die Option „-Dfile.encoding=COMPAT“ verwenden.
  • Das Paket enthält das Paket com.sun.net.httpserver, das das Dienstprogramm jwebserver und die Bibliotheks-API mit der Implementierung eines einfachen http-Servers für die Bereitstellung statischer Inhalte enthält (CGI und Servlet-ähnliche Handler werden nicht unterstützt). Der eingebaute HTTP-Server ist nicht für Workloads optimiert und unterstützt keine Zugriffskontrolle und Authentifizierung, da er in erster Linie auf den Einsatz im Entwicklungsprozess für Prototyping-, Debugging- und Testprojekte ausgerichtet ist.
  • JavaDoc bietet Unterstützung für das „@snippet“-Tag zum Einbetten von Arbeitsbeispielen und Codeausschnitten in die API-Dokumentation, wo Sie Validierungstools, Syntaxhervorhebung und IDE-Integration verwenden können.
  • Die Implementierung der java.lang.reflect API (Core Reflection), die darauf ausgelegt ist, Informationen über Methoden, Felder und Klassenkonstruktoren sowie Zugriff auf die interne Struktur von Klassen zu erhalten, wurde neu gestaltet. Die java.lang.reflect-API selbst bleibt unverändert, wird jedoch jetzt mithilfe von Methodenhandles implementiert, die vom Modul java.lang.invoke bereitgestellt werden, anstatt Bytecode-Generatoren zu verwenden. Durch die Änderung konnten wir die Implementierungen von java.lang.reflect und java.lang.invoke vereinheitlichen und ihre Wartung vereinfachen.
  • Es wurde eine dritte Vorschau der Vector API vorgeschlagen, die Funktionen für Vektorberechnungen bereitstellt, die mithilfe von Vektoranweisungen auf x86_64- und AArch64-Prozessoren ausgeführt werden und die gleichzeitige Anwendung von Operationen auf mehrere Werte (SIMD) ermöglichen. Im Gegensatz zu den im HotSpot JIT-Compiler bereitgestellten Funktionen zur automatischen Vektorisierung skalarer Operationen ermöglicht die neue API die explizite Steuerung der Vektorisierung für die parallele Datenverarbeitung.
  • SPI-Schnittstelle (Service-Provider-Schnittstelle) zum Auflösen von Hostnamen und IP-Adressen hinzugefügt, sodass Sie alternative Resolver in java.net.InetAddress verwenden können, die nicht an vom Betriebssystem angebotene Handler gebunden sind.
  • Es wird eine zweite Vorschau der Foreign Function & Memory API bereitgestellt, die es Anwendungen ermöglicht, mit Code und Daten außerhalb der Java-Laufzeit zu interagieren. Mit der neuen API können Sie Nicht-JVM-Funktionen effizient aufrufen und auf nicht JVM-verwalteten Speicher zugreifen. Sie können beispielsweise Funktionen aus externen gemeinsam genutzten Bibliotheken aufrufen und auf Prozessdaten zugreifen, ohne JNI zu verwenden.
  • Eine zweite experimentelle Implementierung des Mustervergleichs in „Switch“-Ausdrücken wurde hinzugefügt, die die Verwendung flexibler Muster in „Case“-Beschriftungen anstelle von genauen Werten ermöglicht und eine Reihe von Werten gleichzeitig abdeckt, für die zuvor eine Verwendung erforderlich war umständliche Ketten von „if...else“-Ausdrücken. Objekt o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); Standard -> o.toString(); };
  • Der Finalisierungsmechanismus und die damit verbundenen Methoden wie Object.finalize(), Enum.finalize(), Runtime.runFinalization() und System.runFinalization() sind veraltet und werden in einer zukünftigen Version deaktiviert.
  • Die Garbage Collectors ZGC (Z Garbage Collector), SerialGC und ParallelGC unterstützen die Zeilendeduplizierung.

Source: opennet.ru

Kommentar hinzufügen