Veröffentlichung von Java SE 14

Nach sechs Monaten Entwicklung hat die Firma Oracle die die Plattform Java SE 14 (Java Platform, Standard Edition 14), dessen Referenzimplementierung das OpenJDK-Projekt ist. In Java SE 14 bleibt die Rückwärtskompatibilität zu früheren Versionen der Java-Plattform erhalten, sodass alle zuvor geschriebenen Java-Projekte ohne Änderungen unter der neuen Version lauffähig sind. Bereitgestellte Installationspakete von Java SE 14 (JDK, JRE und Server JRE) werden für Linux (x86_64), Windows und macOS. Die Referenzimplementierung wurde im Rahmen des OpenJDK-Projekts entwickelt von Java 14 umgestellt. ist vollständig unter der GPLv2-Lizenz mit Ausnahmen von GNU ClassPath geöffnet, die eine dynamische Verknüpfung mit kommerziellen Produkten ermöglichen.

Java SE 14 gehört zur Kategorie der regulären Support-Versionen, für die Updates bis zur nächsten Veröffentlichung bereitgestellt werden. Für langfristigen Support (LTS) sollte Java SE 11 verwendet werden, dessen Updates bis 2026 bereitgestellt werden. Die vorherige LTS-Version Java 8 wird bis Dezember 2020 unterstützt. Die nächste LTS-Version ist für September 2021 geplant. Es sei daran erinnert, dass mit der Veröffentlichung von Java 10 ein neuer Entwicklungsprozess eingeführt wurde, der einen kürzeren Zyklus für neue Versionen vorsieht. Neue Funktionen werden nun in einem ständig aktualisierten Master-Branch entwickelt, in den bereits fertige Änderungen aufgenommen werden und von dem alle sechs Monate Branches für die Stabilisierung neuer Veröffentlichungen abgezweigt werden.

Von Neuheiten von Java 14 umgestellt. kann markieren:

  • Experimentelle Unterstützung hinzugefügt Musterabgleich im Operator „instanceof“, die es ermöglicht, die lokale Variable direkt für den Zugriff auf den überprüften Wert zu definieren. Zum Beispiel kann man direkt schreiben „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ ohne die explizite Definition „String s = (String) obj“.

    War:

    if (obj instanceof Group) {
    Group group = (Group) obj;
    var entries = group.getEntries();
    }

    Jetzt kann auf die Definition „Group group = (Group) obj“ verzichtet werden:

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Experimentelle Unterstützung für das neue Schlüsselwort « hinzugefügtrecord«, das eine kompakte Form zur Definition von Klassen bereitstellt und es ermöglicht, ohne explizite Definition verschiedener low-level Methoden wie equals(), hashCode() und toString() auszukommen, wenn Daten nur in Feldern gespeichert werden, deren Bearbeitungsverhalten unverändert bleibt. Wenn im Klassendesign generische Implementierungen der Methoden equals(), hashCode() und toString() verwendet werden, kann auf deren explizite Definition verzichtet werden:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Diese Deklaration führt automatisch zu der Hinzufügung von Implementierungen der Methoden equals(), hashCode() und toString() zusätzlich zum Konstruktor und den Methoden, die die Datenänderungen überwachen (Getter).

  • Standardisiert und standardmäßig aktiviert, unterstützt die neue Form von Ausdrücken «switch», die kein «break»-Statement benötigt. Dadurch können wiederholte Labels kombiniert werden, und sie kann nicht nur als Anweisung, sondern auch als Ausdruck verwendet werden.

    var log = switch (event) {
    case PLAY -> «Der Benutzer hat die Wiedergabetaste gedrückt»;
    case STOP, PAUSE -> «Der Benutzer benötigt eine Pause»;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield «Unbekanntes Ereignis » + message +
    » protokolliert am » + now;
    }
    };

  • Erweiterte experimentelle Unterstützung Textblöcke — neuer Form von Zeichenliteralen, die es ermöglichen, mehrzeilige Textdaten ohne Zeichenescapierung im Quellcode einzufügen, während das ursprüngliche Format des Textes im Block beibehalten wird. Der Block wird in drei doppelten Anführungszeichen eingeschlossen. In Java 14 wird in Textblöcken die Escape-Sequenz «\s» zur Definition eines Leerzeichens und «\» zur Verknüpfung mit der nächsten Zeile unterstützt (das Ignorieren des Zeilenumbruchs, wenn eine sehr lange Zeile ausgegeben werden soll). Zum Beispiel anstelle von Code

    String html = "" +
    "\n\t" + "" +
    «\n\t\t» + «

    »Java 14 ist da!«

    » +
    "\n\t" + "" +
    "\n" + "";

    kann man angeben:

    String html = """
    <HTML>
    <BODY>

    »Java 14\
    ist da!"
    </BODY>
    """;

  • Die Informationsvielfalt bei der Diagnose von Ausnahmen wurde erweitert NullPointerException. Während in der Vergangenheit die Fehlermeldung lediglich auf die Zeilennummer verwies, wird jetzt detailliert angegeben, welcher der Methoden die Ausnahme ausgelöst hat. Die erweiterte Diagnose kann vorerst nur aktiviert werden, wenn das Flag „-XX:+ShowCodeDetailsInExceptionMessages“ beim Start gesetzt wird. Zum Beispiel führt das Setzen dieses Flags bei einer Ausnahme in der Zeile

    var name = user.getLocation().getCity().getName();

    zum Ausdruck der Nachricht

    Exception in thread «main» java.lang.NullPointerException: Cannot invoke «Location.getCity()»
    because the return value of «User.getLocation()» is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    , was verdeutlicht, dass die Methode Location.getCity() nicht aufgerufen wurde, da User.getLocation() den Wert null zurückgab.

  • Flagge „—python.EmulateJython“ implementiert, um JVM-Klassen mit normaler Python-Syntax beim Import zu verwenden und JVM-Ausnahmen aus Python-Code abzufangen. eine vorläufige Version des jpackage-Tools, das die Erstellung von Paketen für eigenständige (self-contained) Java-Anwendungen ermöglicht. Das Tool basiert auf javapackager aus JavaFX und ermöglicht die Erstellung von Paketen in Formaten, die für verschiedene Plattformen spezifisch sind (msi und exe für Windows, pkg und dmg für macOS, deb und rpm für Linux). Die Pakete enthalten alle erforderlichen Abhängigkeiten.
  • Im G1-Garbage Collector ein gibt es einen neuen Mechanismus zur Verteilung von Speicher, der die Besonderheiten der Arbeit auf großen Systemen, die eine Architektur nutzen, berücksichtigt. NUMA. Der neue Speicherverwalter wird mit dem Flag «+XX:+UseNUMA» aktiviert und kann die Leistung auf NUMA-Systemen erheblich steigern.
  • Hinzugefügt API zur Echtzeitverfolgung von JFR-Ereignissen (JDK Flight Recorder), zum Beispiel für die Einrichtung kontinuierlicher Überwachung.
  • Hinzugefügt das Modul jdk.nio.mapmode, das neue Modi (READ_ONLY_SYNC, WRITE_ONLY_SYNC) zum Erstellen von abgebildeten Byte-Puffern (MappedByteBuffer) bietet, die auf nichtflüchtigen Speicher (NVM) verweisen.
  • Flagge „—python.EmulateJython“ implementiert, um JVM-Klassen mit normaler Python-Syntax beim Import zu verwenden und JVM-Ausnahmen aus Python-Code abzufangen. eine Vorabversion der API für Foreign-Memory Access, die es Java-Anwendungen ermöglicht, sicher und effizient auf Speicherbereiche außerhalb des Java-Heaps zuzugreifen, und dabei neue Abstraktionen wie MemorySegment, MemoryAddress und MemoryLayout verwendet.
  • Angekündigt veraltete Ports für das Betriebssystem Solaris und SPARC-Prozessoren (Solaris/SPARC, Solaris/x64 und Linux/SPARC) mit der Absicht, diese Ports in Zukunft zu entfernen. Die Einstufung dieser Ports als veraltet wird der Community ermöglichen, die Entwicklung neuer Funktionen für OpenJDK zu beschleunigen, ohne Zeit mit der Wartung von Solaris- und SPARC-spezifischen Merkmalen zu verschwenden.
  • Entfernt den Garbage Collector CMS (Concurrent Mark Sweep), der vor zwei Jahren als veraltet gekennzeichnet wurde und nicht mehr unterstützt wird (der Garbage Collector G1 hat CMS längst abgelöst). Darüber hinaus, ankündigt Die Verwendung einer Kombination der Garbage-Collection-Algorithmen ParallelScavenge und SerialOld (Start mit den Optionen „-XX:+UseParallelGC -XX:-UseParallelOldGC“) ist veraltet.
  • Experimentelle Unterstützung für den Z Garbage Collector (ZGC) auf den Plattformen macOS und Windows wurde bereitgestellt (zuvor wurde nur Linux unterstützt). ZGC arbeitet im passiven Modus und minimiert nach Möglichkeit die durch die Garbage-Collection verursachten Verzögerungen (die Stop-Zeit bei Verwendung von ZGC überschreitet 10 ms nicht) und kann sowohl mit kleinen als auch mit sehr großen Heap-Größen von mehreren Hundert Megabyte bis hin zu vielen Terabyte betrieben werden.
  • Entfernt Werkzeuge und API zur Komprimierung von JAR-Dateien unter Verwendung des Pack200-Algorithmus.

Quelle: opennet.ru

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster