Java JDK 11: Alle neuen Funktionen jetzt verfügbar

Das Java Development Kit (JDK) 11 ist jetzt allgemein verfügbar und für die Produktion bereit. Es bietet Produktivitätsverbesserungen und eine HTTP-Client-API, die HTTP / 2 implementiert.

Version 11 der Java Standard Edition (SE) enthält 16 wichtige Funktionsänderungen. Java 11 verliert auch einige Funktionen durch das Entfernen von CORBA- und Java EE-Modulen (kürzlich in Jakarta EE umbenannt) sowie durch das Entfernen von JavaFX, das jetzt als eigenständige Technologie verfügbar ist.

In Java 11 hat Oracle das Haupt-Repository jdk / jdk in das Stabilisierungs-Repository jdk / jdk11 unterteilt. Änderungen, die an jdk / jdk oder jdk / client gesendet wurden, sind jetzt für JDK 12 markiert. Das Stabilisierungs-Repository kann ausgewählte Fehlerkorrekturen und, falls genehmigt, späte Verbesserungen gemäß dem JDK-Freigabeprozess akzeptieren.

Die neueste Version der Oracle-Implementierung von Standard-Java ist eine LTS-Version (Long Term Support), die mindestens acht Jahre lang von Oracle kommerziell unterstützt wird. Fehlerkorrekturen und Sicherheitsupdates werden bis 2026 angeboten. Alle drei Jahre werden neue LTS-Versionen fällig. JDK 17 wird voraussichtlich 2021 die nächste LTS-Version sein. Zwischenveröffentlichungen werden alle sechs Monate veröffentlicht.

Wo kann ich JDK 11 herunterladen?

Sie können JDK 11 vom Oracle Technology Network herunterladen.

Neue Funktionen im Java 11 JDK

JDK 11 verfügt über 16 neue Funktionen:

  • Verbesserung der Aarch64-Intrinsics durch Implementierung neuer Intrinsics für die Funktionen  lang.Mathsin, cos und log auf Aarch64-Prozessoren. In diesem Vorschlag werden spezielle CPU-Architektur-spezifische Codemuster hervorgehoben, die die Anwendungs- und Benchmark-Leistung verbessern.
  • Nest-basierte Zugriffssteuerung führt Nester ein, einen Zugriffssteuerungskontext, der mit dem Begriff der verschachtelten Typen in der Java-Sprache übereinstimmt. Mit Nestern können Klassen, die logisch Teil derselben Codeentität sind, aber zu unterschiedlichen Klassendateien kompiliert werden, auf die privaten Mitglieder des anderen zugreifen, ohne dass Compiler zum Einfügen von Bridge-Methoden zur Erweiterung der Barrierefreiheit erforderlich sind.
  • Transport Layer Security (TLS) 1.3, bei dem diese Überarbeitung des TLS-Protokolls in JDK 11 integriert wird und erhebliche Sicherheits- und Leistungsvorteile bietet. Es gibt jedoch kein Ziel, alle Funktionen von TLS 1.3 zu unterstützen. Um das Risiko einer Inkompatibilität zu minimieren, implementiert TLS 1.3 standardmäßig den Abwärtskompatibilitätsmodus. Anwendungen können diesen Modus nach Bedarf ein- oder ausschalten.
  • Verfall der Nashorn JavaScript-Engine zusammen mit dem JJS-Tool mit der Absicht, sie in Zukunft zu entfernen. Oracle hat festgestellt, dass es schwierig ist, Nashorn beizubehalten, da ECMAScript-Sprachkonstrukte und -APIs schnell angepasst und modifiziert wurden.
  • HTTP-Client (Standard), der den in JDK 9 eingeführten und in JDK 10 aktualisierten inkubierten HTTP-API-Client standardisiert. Die API bietet eine nicht blockierende Anforderungs- und Antwortsemantik CompleteableFutures, die verknüpft werden kann, um abhängige Aktionen auszulösen. Die jetzt asynchrone Implementierung wurde nach der Inkubation in JDKs 9 und 10 fast vollständig neu geschrieben. Das RX Flow-Konzept wurde in die Implementierung übernommen, wodurch viele benutzerdefinierte Konzepte eliminiert wurden, die zur Unterstützung von HTTP / 2 erforderlich sind. Der Datenfluss kann jetzt einfacher von Anforderungsverlegern und Antwortverlegern auf Benutzerebene bis zum zugrunde liegenden Socket verfolgt werden. Dies reduziert die Komplexität und maximiert die Möglichkeit der Wiederverwendung zwischen HTTP / 1 und HTTP / 2.
  • Der Epsilon-Garbage-Collector, der als "No-Op" -Kollektor in Rechnung gestellt wird, übernimmt die Speicherzuweisung, ohne dass tatsächliche Speicherrückgewinnungsmechanismen implementiert werden. Zu den Anwendungsfällen von Epsilon gehören Tests auf Leistung, Speicherdruck und die Schnittstelle der virtuellen Maschine. Es könnte auch für kurzlebige Jobs verwendet werden.
  • Eine lokale Variablensyntax für Lambda-Parameter sollte die Syntax einer formalen Parameterdeklaration in einem implizit typisierten Ausdruck an der Syntax einer lokalen Variablendeklaration ausrichten. Dies würde es ermöglichen var , verwendet zu werden, wenn formale Parameter eines implizit typisierten Lambda-Ausdrucks deklariert werden.
  • Das Java-Klassendateiformat wird erweitert, um ein neues konstantes Poolformular zu unterstützen CONSTANT_Dynamic. Ziel ist es, die Kosten und Störungen bei der Entwicklung neuer Formen materialisierbarer Einschränkungen für Klassendateien zu reduzieren.
  • Die Schlüsselübereinstimmung mit der Kryptographie von Curve25519 und Curve448 sollte effizienter und sicherer sein als das bestehende Diffie-Hellman-Schema mit elliptischer Kurve. Die beiden elliptischen Kurven Curve25510 und Curve448 eignen sich für eine zeitkonstante Implementierung und eine ausnahmefreie Skalarmultiplikation, die laut IETF gegenüber einer Reihe von Seitenkanalangriffen, einschließlich Timing- und Cache-Angriffen, widerstandsfähiger ist. Zu den Zielen des Vorschlags gehören eine API und die Implementierung des Schlüsselvereinbarungsschemas sowie die Entwicklung einer plattformunabhängigen All-Java-Implementierung. Die Komplexität und Subtilität der im Vorschlag enthaltenen modularen arithmetischen Implementierung birgt jedoch ein Risiko.
  • Flight Recorder bietet ein Framework für die Datenerfassung mit geringem Overhead zur Fehlerbehebung sowohl bei Java-Anwendungen als auch bei der HotSpot-JVM. Flight Recorder war eine Funktion des kommerziellen JDK von Oracle, der Quellcode wurde jedoch in ein offenes Repository verschoben, um die Funktion allgemein verfügbar zu machen. Iclouded wären die APIs zum Erzeugen und Konsumieren von Daten als Ereignisse, die einen Puffermechanismus und ein binäres Datenformat bereitstellen und die Konfiguration und Filterung von Ereignissen ermöglichen. Der Vorschlag sieht auch die Bereitstellung von Ereignissen für die Betriebssystem-, HotSpot- und JDK-Bibliotheken vor.
  • Aktualisieren der Plattform-APIs zur Unterstützung von Unicode Version 10.0, um Java auf dem neuesten Stand zu halten. Unterstützung wird in folgenden Klassen erwartet:
    • Characterund Stringim langPaket
    • NumericShaperim awt.fontPaket
    • Bidi, BreakIteratorUnd Normalizerin dem textPaket
  • Implementierung der kryptografischen Algorithmen ChaCha20 und Poly1305. ChaCha2020 ist eine relativ neue Stream-Verschlüsselung, die die ältere, unsichere R4-Stream-Verschlüsselung ersetzen kann. ChaCha20 würde mit dem Poly1305-Authentifikator gepaart. ChaCha20- und ChaCha20-Poly1305-Verschlüsselungsimplementierungen würden mit den im SunJCE-Anbieter (Java Cryptography Extension) implementierten Algorithmen unter Verwendung der crypto.CipherSpiAPI bereitgestellt .
  • Erweitern des Java-Startprogramms zum Ausführen eines Programms, das als einzelne Datei mit Java-Quellcode bereitgestellt wird, sodass diese Programme direkt vom Quellcode ausgeführt werden können. Single-File-Programme sind häufig beim Schreiben kleiner Dienstprogramme oder für Entwickler in den frühen Phasen des Java-Lernens. Eine einzelne Quelldatei kann auch zu mehreren Klassendateien kompiliert werden, was den Verpackungsaufwand erhöht. In diesen Kontexten ist das Kompilieren eines Programms vor dem Ausführen nur ein unnötiger Schritt, der auf Tradition basiert.
  • Low-Overhead-Heap-Profiling, das eine Möglichkeit bietet, Java-Heap-Zuordnungen zu testen, auf die über die JVM-Tool-Schnittstelle zugegriffen werden kann. Ziel dieser Bemühungen ist es, Informationen über diese Zuordnungen auf eine Weise zu erhalten, die wenig Aufwand erfordert, über eine programmatische Schnittstelle zugänglich ist und alle Zuordnungen abtasten kann. Implementierungsunabhängigkeit und Bereitstellung von Daten über lebende und tote Haufen sind ebenfalls Ziele. Ein schlechtes Heap-Management kann zu Heap-Erschöpfung und Müllabfuhr führen. Den meisten Tools, die dies beheben, fehlt die Anrufsite für bestimmte Zuordnungen. Diese Informationen können für das Debuggen von Speicherproblemen von entscheidender Bedeutung sein.
  • Veraltet von Pack200- und Unpack200-Tools und der Pack200-API in util.jar. Pack200 ist ein Komprimierungsschema für JAR-Dateien, mit dem die Festplatten- und Bandbreitenanforderungen für das Packen, Übertragen und Bereitstellen von Anwendungen verringert werden sollen. Die Wartungskosten und die geringe Nutzung rechtfertigen ihre Beibehaltung nicht, sagen Projektleiter.
  • Der Z Garbage Collector (ZGC), ein experimenteller Garbage Collector mit geringer Latenz, für Heaps von relativ kleinen bis zu sehr großen Heaps mit einer Größe von vielen Terabyte. Bei Verwendung von ZGC sollten die Pausenzeiten 10 ms nicht überschreiten und die Anwendungsdurchsatzreduzierung im Vergleich zur Verwendung des G1-Kollektors nicht um mehr als 15 Prozent verringert werden. ZGC legt auch den Grundstein für zukünftige Funktionen und Optimierungen. Linux / x64 wird die erste Plattform sein, die ZGC-Unterstützung erhält.

Was wurde aus Java JDK 11 entfernt?

Die Java EE EE- und CORBA-Module wurden in Java SE 9 nicht mehr unterstützt, um sie in einer späteren Version (JDK 11) zu entfernen.

Java SE 6, das im Dezember 2006 veröffentlicht wurde, enthielt einen vollständigen Webdienst-Stack für Entwickler - einschließlich vier Technologien, die für die Java EE-Plattform entwickelt wurden: JAX-WS (Java-API für XML-basierte Webdienste, JAXB (Java Architecture for) XML-Bindung), JAF (JavaBeans Activation Framework) und allgemeine Anmerkungen für Java. Im Laufe der Zeit entwickelten sich die Java EE-Versionen weiter, was zu Schwierigkeiten in der Java SE führte, z. B. zum Einbeziehen von für Java SE irrelevanten Technologien und zu einer schwierigeren Wartung in beiden Java Editionen: Mit eigenständigen Versionen der Java EE-Technologien, die auf Websites von Drittanbietern verfügbar sind, müssen sie laut Oracle nicht mehr in Java SE oder im JDK verfügbar sein.

Einige Anwendungen werden jedoch nicht kompiliert oder ausgeführt, wenn sie auf die sofort einsatzbereite Unterstützung im JDK für Java EE-APIs und -Tools angewiesen sind. Bei der Migration von JDK 6, 7 oder 8 auf eine spätere Version treten Binär- und Quellinkompatibilitäten auf. Laut Oracle können Entwickler, die von diesen Risiken betroffen sind, stattdessen alternative Versionen von Java EE-Technologien bereitstellen.

CORBA stammt aus den 1990er Jahren, und laut Oracle besteht heute kein nennenswertes Interesse an der Entwicklung moderner Java-Anwendungen mit CORBA. Und die Kosten für die Aufrechterhaltung des CORBA-Supports überwiegen die verbleibenden Vorteile.

Beim Entfernen von CORBA besteht jedoch die Gefahr, dass CORBA-Implementierungen nicht ausgeführt werden, wenn sie nur eine Teilmenge der CORBA-APIs enthalten und das JDK den Rest bereitstellt. Es gibt keine CORBA-Version eines Drittanbieters, und es ist ungewiss, ob ein Drittanbieter die CORBA-API-Wartung übernehmen könnte.

JavaFX wird entfernt, sodass es nicht an den zweimal jährlich stattfindenden Aktualisierungsplan von Java JDK gebunden ist.