Java 9 ist da: Alles was Sie wissen müssen

Java 9 - formal Java Platform Standard Edition Version 9 - ist endlich da und das Java Development Kit (JDK) steht Entwicklern zum Herunterladen zur Verfügung.

Es verfügt über mehrere wichtige, wenn auch kontroverse neue Funktionen, ist aber auch das letzte für den alten Stil der Java-Bereitstellung.

Wo kann man das Java 9 JDK herunterladen?

Oracle hat das Java SE 9 JDK und die Dokumentation zum Download durch Entwickler veröffentlicht.

Die wichtigsten neuen Funktionen in Java 9

Java SE 9 wird fast drei Jahre nach Java SE 8 eingeführt und weist einige wichtige architektonische Änderungen sowie eine Reihe von Verbesserungen auf.

Die Modularität von Java 9 verändert das Spiel

Die neuen, umstrittenen Modularitätsfunktionen, die auf Project Jigsaw basieren, werden sicherlich das Interesse der neuesten Java-Shops wecken, die sehen möchten, was JDK 9 jetzt zu bieten hat, auch wenn konservativere Shops auf die Reifung der Modularität warten.

Die Modularität - in Form des Java Platform Module System - unterteilt das JDK in eine Reihe von Modulen, die zum Ausführen, Kompilieren oder Erstellen kombiniert werden können. Die Modularität wurde als "transitive" Änderung bezeichnet, die das Verständnis der Abhängigkeiten zwischen Modulen ermöglicht.

Die Modularität von Java 9 soll es Entwicklern ermöglichen, anspruchsvolle Anwendungen einfacher zusammenzustellen und zu warten. Außerdem sollte Java besser auf kleinere Geräte skaliert werden können, während Sicherheit und Leistung verbessert werden.

Zu den Modularitätsaspekten von Java 9 gehören das Packen von Anwendungen, das Modularisieren des JDK selbst und das Reorganisieren des Quellcodes in Module. Das Build-System wurde erweitert, um Module zu kompilieren und Modulgrenzen beim Erstellen zu erzwingen. JDK- und Java Runtime Environment (JRE) -Bilder werden neu strukturiert, um Module zu verarbeiten. Auf JavaFX-UI-Steuerelemente und CSS-APIs kann jetzt modular zugegriffen werden.

Eine Vielzahl von Konfigurationen wird unterstützt. Infolgedessen sollten Skalierbarkeit, Sicherheit und Anwendungsleistung verbessert werden. Die einfachere Skalierung von Java auf kleine Geräte ist ein wesentlicher Treiber des modularen Aufwands.

Dank der Modularität können Entwickler Bibliotheken und große Anwendungen sowohl für Java SE (Standard Edition) als auch für Java EE (Enterprise Edition) besser erstellen und verwalten. Während der Entwicklung von Java 9 hatten Oracle, IBM, Red Hat und andere große Meinungsverschiedenheiten darüber, wie genau eine solch radikale Änderung an der Plattform vorgenommen werden kann. Das Modulsystem selbst wurde im Mai abgelehnt und erst nach Fortschritten im Juni bei einer zweiten Abstimmung genehmigt.

Selbst mit Zustimmung der großen Java-Anbieter bleibt umstritten, ob die Modularität Java-Entwicklern viel Gutes bringt. Einige Experten sagen Ja, andere Nein. Unabhängig davon ist Java 9 jetzt modularisiert.

Um die Migration zu modularisiertem Java 9 zu vereinfachen, ermöglicht Java 9 den illegalen reflektierenden Zugriff auf Code im Klassenpfad, der von der JRE zur Suche nach Klassen und Ressourcendateien verwendet wird. Diese Funktion wird nach Java 9 nicht mehr zugelassen.

Compiler-Verbesserungen für Java 9-Code

Das Java 9-Upgrade bietet mehrere neue Funktionen zum Kompilieren von Code, darunter vor allem die AoT-Kompilierung. Diese Funktion befindet sich noch in einer experimentellen Phase und ermöglicht die Kompilierung von Java-Klassen zu nativem Code, bevor sie in der virtuellen Maschine gestartet wird. Diese Funktion soll die Startzeit kleiner und großer Anwendungen verbessern und die Spitzenleistung nur begrenzt beeinflussen.

Just-in-Time-Compiler (JIT) sind schnell, aber Java-Programme sind so umfangreich geworden, dass es lange dauert, bis sich die JIT vollständig aufgewärmt hat, sodass einige Java-Methoden nicht kompiliert werden und die Leistung beeinträchtigt wird. Die vorzeitige Kompilierung soll diese Probleme beheben.

Dmitry Leskov, Marketingdirektor beim Java-Technologieanbieter Excelsior, befürchtet jedoch, dass die vorzeitige Kompilierungstechnologie nicht ausgereift genug ist, und wünscht sich, Oracle hätte bis Java 10 auf eine solidere Version gewartet.

Java 9 bietet auch die zweite Phase der Oracle Smart Compilation-Bereitstellung. Mit dieser Funktion wird die s javac Stabilität und Portabilität des  Tools verbessert, sodass es standardmäßig in der JVM (Java Virtual Machine) verwendet werden kann. Das Tool wird auch verallgemeinert, damit es für große Projekte außerhalb des JDK verwendet werden kann. JDK 9 hat auch den javac Compiler aktualisiert,  damit er Java 9-Programme kompilieren kann, die auf einigen älteren Java-Versionen ausgeführt werden können.

Eine weitere neue, aber experimentelle Kompilierungsfunktion ist die JVM Compiler Interface (JVMCI) auf Java-Ebene. Über diese Schnittstelle kann ein in Java geschriebener Compiler von der JVM als dynamischer Compiler verwendet werden. Die API von JVMCI bietet Mechanismen für den Zugriff auf VM-Strukturen, die Installation von kompiliertem Code und das Einstecken in das JVM-Kompilierungssystem.

Das Schreiben eines JVM-Compilers in Java sollte einen qualitativ hochwertigen Compiler ermöglichen, der einfacher zu warten und zu verbessern ist als vorhandene in C oder C ++ geschriebene Compiler. Daher sollten in Java selbst geschriebene Compiler einfacher zu warten und zu verbessern sein. Weitere bestehende Bemühungen, In-Java-Compiler zu aktivieren, sind das Graal-Projekt und Project Metropolis.

Eine neue Compiler-Steuerungsfunktion soll eine differenzierte und methodenkontextabhängige Steuerung von JVM-Compilern ermöglichen, sodass Entwickler die Compiler-Steuerungsoptionen zur Laufzeit ohne Leistungseinbußen ändern können. Das Tool ermöglicht auch Problemumgehungen für JVM-Compiler-Fehler.

REPL kommt endlich zu Java 9

Java 9 verfügt über ein REPL-Tool (Read-Eval-Print Loop) - ein weiteres langfristiges Ziel für Java, das in dieser Version nach Jahren der Entwicklung unter Project Kulia Wirklichkeit wird.

Java 9s REPL heißt jShell und wertet deklarative Anweisungen und Ausdrücke interaktiv aus. Entwickler können vor dem Kompilieren Feedback zu Programmen erhalten, indem sie nur einige Codezeilen eingeben.

Zu den Funktionen des Befehlszeilentools gehören das Ausfüllen von Registerkarten und das automatische Hinzufügen der erforderlichen Terminalsemikolons. Die jShell-API ermöglicht jShell-Funktionen in IDEs und anderen Tools, obwohl das Tool selbst keine IDE ist.

Das Fehlen einer REPL wurde als Grund für die Abkehr von Schulen von Java angeführt. (Sprachen wie Python und Scala haben seit langem eine REPL.) Der Gründer der Scala-Sprache, Martin Odersky, stellt jedoch die Nützlichkeit einer REPL in Java in Frage und sagt, Java sei anweisungsorientiert, während REPLs ausdrucksorientiert sind.

Verbesserungen an der Streams-API in Java 9

Mit Streams in Java können Entwickler Berechnungen ausdrücken, damit die Datenparallelität effizient genutzt werden kann. Die Stream-Funktion in Java 8 dient zur deklarativen Verarbeitung von Daten unter Nutzung von Multicore-Architekturen.

In Java 9 fügt die Streams-API Methoden hinzu, mit denen Elemente bedingt aus Stream übernommen und gelöscht, Stream-Elemente durchlaufen und ein Stream aus einem nullwertfähigen Wert erstellt werden kann, während der Satz von Java SE-APIs erweitert wird, die als Streams-Quellen dienen können.

Der Code-Cache kann in Java 9 unterteilt werden

Mit JDK 9 kann der Code-Cache in Segmente unterteilt werden, um die Leistung zu verbessern und Erweiterungen wie feinkörniges Sperren zu ermöglichen. Die Ergebnisse sollten verbessert werden, da spezialisierte Iteratoren nicht methodischen Code überspringen. Trennen von nicht methodischem, profiliertem und nicht profiliertem Code; und Verbesserung der Ausführungszeit für einige Benchmarks. 

Bessere JavaScript-Unterstützung in Java 9 über Project Nashorn

Das Projekt Nashorn, das eine leichtgewichtige JavaScript-Laufzeit für Java bereitstellt, wird in JDK 9 verbessert. Das Projekt Nashorn war ein Versuch, eine leistungsstarke, aber leichtgewichtige JavaScript-Laufzeit in Java zu implementieren, die dem bei Netscape begonnenen Rhino-Projekt folgt. Das Projekt Nashorn wurde beauftragt, die Einbettung von JavaScript in Java-Anwendungen zu ermöglichen. Es stellte Java eine JavaScript-Engine in JDK 8 zur Verfügung.

JDK 9 enthält eine Parser-API für den ECMAScript-Syntaxbaum von Nashorn. Die API ermöglicht die ECMAScript-Code-Analyse durch IDEs und serverseitige Frameworks, ohne von den internen Implementierungsklassen von Project Nashorn abhängig zu sein.

Die HTTP / 2-Client-API kommt zu Java 9

Die Beta-HTTP / 2-Client-API wurde in JDK 9 eingeführt und implementiert in Java das Upgrade auf das HTTP-Kernprotokoll des Webs. WebSocket wird auch von der API unterstützt.

Die HTTP / 2-API kann die HttpURLConnection-API ersetzen, bei der Probleme aufgetreten sind, z. B. das Design mit nicht mehr gültigen Protokollen, die vor HTTP / 1 liegen, zu abstrakt und schwer zu verwenden sind.

Verbesserte HTML5- und Unicode-Unterstützung in Java 9

In JDK 9 wird das Javadoc-Dokumentationstool erweitert, um HTML5-Markups zu generieren. Der Unicode 8.0-Codierungsstandard, der 8.000 Zeichen, 10 Blöcke und sechs Skripte hinzufügt, wird ebenfalls unterstützt.

Die DTLS-Sicherheits-API wurde zu Java 9 hinzugefügt

Aus Sicherheitsgründen fügt Java 9 eine API für DTLS (Datagram Transport Layer Security) hinzu. Das Protokoll wurde entwickelt, um das Abhören, Manipulieren und Fälschen von Nachrichten in der Client / Server-Kommunikation zu verhindern. Eine Implementierung wird sowohl für den Client- als auch für den Servermodus bereitgestellt.

Was Java 9 veraltet und entfernt

Java 9 veraltet oder entfernt einige Funktionen, die nicht mehr in Mode sind. Das wichtigste unter ihnen ist die Applet-API, die veraltet ist. Es ist aus der Mode gekommen, dass sicherheitsbewusste Browserhersteller die Unterstützung für Java-Browser-Plug-Ins entfernt haben. Das Aufkommen von HTML5 trug auch zu ihrem Niedergang bei. Entwickler werden jetzt zu Alternativen wie Java Web Start geführt, um Anwendungen über einen Browser oder installierbare Anwendungen zu starten. 

Das Appletviewer-Tool ist ebenfalls veraltet.

Java 9 veraltet auch den CMS-Garbage Collector (Concurrent Mark Sweep), dessen Unterstützung in einer zukünftigen Version eingestellt werden soll. Ziel ist es, die Entwicklung anderer Garbage Collectors in der virtuellen HotSpot-Maschine zu beschleunigen. Der G1-Garbage Collector mit niedriger Pause soll CMS langfristig ersetzen.

In JDK 8 werden zuvor in JDK 8 veraltete Garbage Collection-Kombinationen entfernt. Dazu gehören selten verwendete Kombinationen wie Incremental CMS, ParNew + SerialOld und DefNew + CMS, die der Garbage Collector-Codebasis zusätzliche Komplexität verliehen.

Java 9 entfernt auch Java-Warnungen in Importanweisungen, um große Codebasen von Flusenwarnungen zu befreien. Bei diesen Codebasen muss die veraltete Funktionalität häufig für einige Zeit unterstützt werden. Das Importieren eines veralteten Konstrukts rechtfertigt jedoch keine Warnmeldung, wenn die Verwendung des Konstrukts beabsichtigt und unterdrückt ist.

In Java 9 wurde auch die Möglichkeit entfernt, die JRE zum Startzeitpunkt über die Funktion Multiple JRE (mJRE) auszuwählen. Die Funktion wurde selten verwendet, erschwerte die Implementierung des Java-Launchers und wurde beim Debüt in JDK 5 nie vollständig dokumentiert.

Oracle hat den in der JVM abgelösten JVM TI-Agenten (Tool Interface) hprof (Heap Profiling) entfernt. Das Jhat-Tool wurde ebenfalls entfernt, da es von überlegenen Heap-Visualisierern und -Analysatoren überholt wurde.

Java 9 ist das Ende seiner Zeile, wenn die neue Java 9-Zeile beginnt

Man könnte sagen, dass Java 9 mit all den neuen Funktionen mit einem Knall ausgeht. Oracle hat kürzlich bekannt gegeben, dass Java 9 hinsichtlich seiner Bezeichnung und der zwischen den Hauptversionen verstrichenen Zeit das letzte seiner Art ist.

Von nun an ist für Java eine sechsmonatige Release-Trittfrequenz geplant. Die nächste Hauptversion heißt Java 18.3 und soll im März 2018 erscheinen, gefolgt von Java 18.9 sechs Monate später.

Die neue Release-Trittfrequenz von Java bedeutet auch, dass JDK 9 nicht als Langzeit-Support-Release ausgewiesen wird. Stattdessen wird die nächste Langzeitversion Java 18.9 sein.

Die schnellere Release-Trittfrequenz von Java bedeutet, dass Entwickler nicht so lange auf Hauptversionen warten müssen. Dies kann auch bedeuten, dass Entwickler Java 9 und seine „unreifen“ Modularitätsfunktionen überspringen und sechs Monate auf die neue Version warten, die wahrscheinlich alle ausbügeln würde Knicke, sagte Simon Maple, Director of Java Advocacy beim Java-Tool-Anbieter ZeroTurnaround.