Java SE 14-Veröffentlichung

Nach sechs Monaten Entwicklungszeit hat Oracle veröffentlicht eine Plattform JavaSE 14 (Java Platform, Standard Edition 14) wird das Open-Source-Projekt OpenJDK als Referenzimplementierung verwendet. Java SE 14 behält die Abwärtskompatibilität mit früheren Versionen der Java-Plattform bei; alle zuvor geschriebenen Java-Projekte funktionieren ohne Änderungen, wenn sie unter der neuen Version ausgeführt werden. Installationsfertige Java SE 14-Builds (JDK, JRE und Server JRE) bereit für Linux (x86_64), Windows und macOS. Vom OpenJDK-Projekt entwickelte Referenzimplementierung Java 14 ist vollständig Open Source unter der GPLv2-Lizenz, mit Ausnahmen von GNU ClassPath, die eine dynamische Verknüpfung mit kommerziellen Produkten ermöglichen.

Java SE 14 wird als allgemeine Support-Version eingestuft und wird bis zur nächsten Version weiterhin Updates erhalten. Der Long Term Support (LTS)-Zweig soll Java SE 11 sein, das bis 2026 weiterhin Updates erhält. Der bisherige LTS-Zweig von Java 8 wird bis Dezember 2020 unterstützt. Die nächste LTS-Veröffentlichung ist für September 2021 geplant. Wir möchten Sie daran erinnern, dass das Projekt mit der Veröffentlichung von Java 10 auf einen neuen Entwicklungsprozess umgestellt hat, was einen kürzeren Zyklus für die Erstellung neuer Releases bedeutet. Neue Funktionen werden nun in einem ständig aktualisierten Hauptzweig entwickelt, der vorgefertigte Änderungen enthält und von dem alle sechs Monate Zweige abgezweigt werden, um neue Versionen zu stabilisieren.

Von Innovationen Java 14 kann man Markierung:

  • Experimentelle Unterstützung hinzugefügt Mustervergleich im „instanceof“-Operator, der es Ihnen ermöglicht, sofort eine lokale Variable zu definieren, um auf den überprüften Wert zuzugreifen. Sie können beispielsweise sofort „if (obj Instanz von String s && s.length() > 5) {.. s.contains(..) ..}“ schreiben, ohne explizit „String s = (String) obj“ zu definieren.

    Es war:

    if (obj-Instanz der Gruppe) {
    Gruppe group = (Group) obj;
    var entries = group.getEntries();
    }

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

    if (obj Instanz der Gruppengruppe) {
    var entries = group.getEntries();
    }

  • Experimentelle Unterstützung für das neue Schlüsselwort „ hinzugefügtRekord", das eine kompakte Form zum Definieren von Klassen bietet und es Ihnen ermöglicht, die explizite Definition verschiedener Low-Level-Methoden wie equal(), hashCode() und toString() in Fällen zu vermeiden, in denen Daten nur in Feldern gespeichert werden, deren Verhalten sich nicht ändert. Wenn eine Klasse Standardimplementierungen der Methoden equal(), hashCode() und toString() verwendet, kann sie auf deren explizite Definition verzichten:

    öffentlicher Datensatz BankTransaction(LocalDate date,
    doppelte Menge
    String-Beschreibung) {}

    Diese Deklaration fügt zusätzlich zu den Konstruktor- und Getter-Methoden automatisch Implementierungen der Methoden equal(), hashCode() und toString() hinzu.

  • Standardisiert und die Unterstützung für eine neue Form von „Switch“-Ausdrücken ist standardmäßig aktiviert, die keine Angabe des „Break“-Operators erfordert, das Kombinieren wiederholter Beschriftungen ermöglicht und nicht nur in Form eines Operators, sondern auch als verwendet werden kann Ausdruck.

    var log = switch (Ereignis) {
    case PLAY -> „Benutzer hat den Play-Button ausgelöst“;
    case STOP, PAUSE -> „Benutzer braucht eine Pause“;
    Standard -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield „Unbekanntes Ereignis“ + Nachricht +
    » angemeldet » + jetzt;
    }
    };

  • Erweiterte experimentelle Unterstützung Textblöcke – eine neue Form von String-Literalen, die es Ihnen ermöglicht, mehrzeilige Textdaten in den Quellcode einzubinden, ohne Zeichen-Escapezeichen zu verwenden und die ursprüngliche Textformatierung im Block beizubehalten. Der Block wird von drei doppelten Anführungszeichen eingerahmt. In Java 14 unterstützen Textblöcke jetzt die Escape-Sequenz „\s“, um ein einzelnes Leerzeichen zu definieren, und „\“, um sie mit der nächsten Zeile zu verketten (wobei Zeilenumbrüche ignoriert werden, wenn Sie eine sehr lange Zeile drucken müssen). Zum Beispiel anstelle von Code

    String html=" » +
    "\n\t" + " » +
    "\n\t\t" + " „Java 1 ist da!“ » +
    "\n\t" + " » +
    „\n“ + „ ";

    Sie können Folgendes angeben:

    String html = „““


    »Java 1\
    ist hier!

    „““;

  • Der Informationsgehalt der Diagnose beim Auftreten von Ausnahmen wurde erweitert NullPointerException. Während sich die Fehlermeldung bisher nur auf die Zeilennummer bezog, wird nun detailliert angegeben, welche Methode die Ausnahme verursacht hat. Die erweiterte Diagnose ist derzeit nur aktiviert, wenn sie mit dem Flag „-XX:+ShowCodeDetailsInExceptionMessages“ gestartet wird. Wenn Sie beispielsweise dieses Flag angeben, wird die Ausnahme in der Zeile angezeigt

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

    führt zu einer Meldung

    Ausnahme im Thread „main“ java.lang.NullPointerException: „Location.getCity()“ kann nicht aufgerufen werden
    weil der Rückgabewert von „User.getLocation()“ null ist
    bei NullPointerExample.main(NullPointerExample.java:5):5)

    Dies macht deutlich, dass die Methode Location.getCity() nicht aufgerufen wurde und User.getLocation() null zurückgegeben hat.

  • Umgesetzt Eine Vorschau des Dienstprogramms jpackage, mit dem Sie Pakete für eigenständige Java-Anwendungen erstellen können. Das Dienstprogramm basiert auf dem Javapackager von JavaFX und ermöglicht die Erstellung von Paketen in nativen Formaten für verschiedene Plattformen (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.
  • Zum G1-Garbage Collector hinzugefügt ein neuer Speicherzuweisungsmechanismus, der die Besonderheiten der Arbeit an großen Systemen unter Verwendung der Architektur berücksichtigt NUMA. Der neue Speicherzuweiser wird über das Flag „+XX:+UseNUMA“ aktiviert und kann die Leistung auf NUMA-Systemen erheblich verbessern.
  • Добавлен API zur On-the-Fly-Überwachung von JFR-Ereignissen (JDK Flight Recorder), beispielsweise zur Organisation einer kontinuierlichen Überwachung.
  • Добавлен jdk.nio.mapmode-Modul, das neue Modi (READ_ONLY_SYNC, WRITE_ONLY_SYNC) zum Erstellen zugeordneter Bytepuffer (MappedByteBuffer) bietet, die auf nichtflüchtigen Speicher (NVM) verweisen.
  • Umgesetzt Eine Vorschau der Foreign-Memory Access API, die es Java-Anwendungen ermöglicht, sicher und effizient auf Speicherbereiche außerhalb des Java-Heaps zuzugreifen, indem sie die neuen Abstraktionen MemorySegment, MemoryAddress und MemoryLayout manipulieren.
  • Angekündigt veraltete Ports für das Solaris-Betriebssystem und SPARC-Prozessoren (Solaris/SPARC, Solaris/x64 und Linux/SPARC) mit der Absicht, diese Ports in Zukunft zu entfernen. Durch die Abschaffung dieser Ports kann die Community die Entwicklung neuer OpenJDK-Funktionen beschleunigen, ohne Zeit mit der Wartung von Solaris- und SPARC-spezifischen Funktionen zu verschwenden.
  • ENTFERNT der CMS-Garbage Collector (Concurrent Mark Sweep), der vor zwei Jahren als veraltet galt und nicht mehr gewartet wurde (CMS wurde vor langer Zeit durch den G1-Garbage Collector ersetzt). Außerdem, öffentlich Die Verwendung einer Kombination aus ParallelScavenge- und SerialOld-Garbage-Collection-Algorithmen (ausgeführt mit den Optionen „-XX:+UseParallelGC -XX:-UseParallelOldGC“) ist veraltet.
  • Experimentelle Unterstützung für den Garbage Collector ZGC (Z Garbage Collector) wurde auf macOS- und Windows-Plattformen bereitgestellt (zuvor nur auf Linux unterstützt). ZGC arbeitet im passiven Modus, minimiert die Latenz aufgrund der Speicherbereinigung so weit wie möglich (die Verzögerungszeit bei Verwendung von ZGC beträgt nicht mehr als 10 ms) und kann sowohl mit kleinen als auch mit großen Heaps arbeiten, deren Größe von mehreren hundert Megabyte bis zu vielen Terabyte reicht.
  • ENTFERNT Toolkit und API zum Komprimieren von JAR-Dateien mit dem Pack200-Algorithmus.

Source: opennet.ru

Kommentar hinzufügen