Suche
Plus 2, die es nicht tun

5 Java-9-Features, die die Softwareentwicklung verändern werden

Alex Zhitnitsky

© Shutterstock.com/Fernando Sanchez Cortes

Jetzt wo der Zeitplan für Java 9 bekannt ist, nimmt sich Alex Zhitnitsky die Top-Features des bevorstehenden Release vor. Machen Sie sich bereit für jshell, Mikrobenchmarks und den G1-Garbage-Collector.

Lassen Sie sich von der relativen Stille, die Java 9 neuerdings umgibt, nicht ins Bockshorn jagen. Die JDK-Committer arbeiten hart an der Vorbereitung des nächsten Release, das voraussichtlich am 21. September 2017 verfügbar sein wird.

Lesen Sie auch: Java 9: neuer, toller, bunter?

Mittlerweile haben wir ein ziemlich klares Bild davon, welche Features Java 9 für uns bereithalten wird. Wenn man Java 8 als die Hauptversion, die sich um Lamdas, Streams und API-Änderungen kümmert bezeichnen würde, so könnte man im Hinblick auf Java 9 sagen, dass sich alles um Jigsaw, zusätzliche Dienstprogramme und unter der Haube vorgenommene Änderungen dreht. In diesem Artikel haben wir einige der Features, von denen wir glauben, dass es die Interessantesten sind, zusammengetragen – abgesehen von dem üblichen Verdächtigen Jigsaw, der sich die Zerlegung der Java-Laufzeitumgebung und die Einführung der Modularität in Javas Kern-Komponenten zur Aufgabe gemacht hat.

Im Folgenden werden diejenigen Java 9-Features, die jeder kennen sollte, genauer vorgestellt. Mit einigen von ihnen kann im Rahmen der Early-Release-Version bereits jetzt herumgespielt werden.

1. Java + REPL = jshell

Wir hatten ja so unsere Bedenken, ob das Projekt Kulla rechtzeitig für Java 9 fertig werden würde, doch nun ist es offiziell. Das nächste Release von Java wird über ein neues Kommandozeilen-Tool, jshell genannt, verfügen, das einen Java-Ansatz für REPL (Read-Eval-Print-Loop) unterstützen und populär machen soll. Das heißt, wenn Sie beispielsweise einige wenige Java-Zeilen laufen lassen wollen, so müssen Sie nicht alles in ein separates Projekt oder eine separate Methode packen. Semikolons können sie übrigens auch vergessen:

-> 2 + 2
| Expression value is: 4
|     assigned to temporary variable $1 of type int

Es gibt zwar einige Alternativen, wie etwa REPL-Add-ons für beliebte IDEs und Lösungen, beispielsweise die Java REPL-Webkonsole, allerdings existiert bislang kein offizieller, „richtiger“ Weg. Falls Sie jshell ausprobieren möchten: Es ist bereits in der Early-Release-Version enthalten.

2. Die Mikrobenchmarks kommen!

Das Java Microbenchmarking Harness (JMH) von Alexey Shipilev hat einen weiteren Entwicklungsschritt getan und wird Teil von Javas offizieller Benchmarking-Lösung. Wir hier bei Takipi lieben Benchmarks wirklich, weshalb wir uns auf eine standardisierte Art der Durchführung schon sehr freuen.

JMH ist ein Java-Harness für die Erstellung, Durchführung und Analyse von Nano-, Mikro-, Milli- und Makrobenchmarks. Im Kontext von präzisen Benchmarks können Faktoren wie Warmup-Zeiten oder Optimierungen einen großen Einfluss auf die Resultate haben, insbesondere wenn man sich im Bereich von Mikro- und Nanosekunden bewegt. Deshalb ist JMH zur Zeit die erste Wahl, wenn man möglichst genaue Ergebnisse bekommen möchte – und jetzt wird dieser Umstand zu einem Synonym von Java 9.

3. Wird G1 der neue Standard-Garbage Collector?

Eine Fehlvorstellung, die wir häufig zu hören bekommen, besteht darin, dass es in Java nur einen Garbage Collector gebe – dabei sind es vier. Ein laufendes, vieldiskutiertes Proposal schlägt vor, den mit Java 7 eingeführten G1 zum Standard-Garbage Collector zu machen. Die Unterschiede zwischen den verschiedenen Garbage Collectoren werden auf dem Takipi-Blog erläutert.

Allgemein gesprochen wurde der G1 entwickelt, um Heaps mit einer Größe von mehr als 4 GB besser zu unterstützten. Er ist bekannt dafür, weniger häufig GC-Pausen zu verursachen, doch wenn es zu Pausen kommt, neigen diese dazu, länger zu sein. Kürzlich diskutierten wir mit Haim Yadid, dem Performanceverantwortlichen bei Outbrain, über GC-relevante Themen. Ziel war es, mehr über die Trade-offs der verschiedenen GCs herauszufinden. Wenn Sie einen tieferen Einblick in diese Debatte gewinnen möchten, kann ich Ihnen für den Anfang insbesondere die hotspot-dev– und die jdk9-dev-Mailingliste empfehlen.

4. HTTP 2.0 ist die Zukunft

Die offizielle HTTP 2.0-RFC, die auf Googles SPDY-Algorithmus aufbaut, wurde erst vor wenigen Monaten abgesegnet. Das SPDY kann im Vergleich zu HTTP 1.1 beträchtliche Geschwindigkeitsverbesserungen – zwischen 11,81 und 47,7 % – vorweisen und ist in den meisten modernen Browsern bereits implementiert.

Java 9 wird über einen vollständigen Support von HTTP 2.0 verfügen. Darüber hinaus wird es einen neuen HTTP-Client enthalten, der HttpURLConnection ersetzen und sowohl HTTP 2.0 als auch WebSockets implementieren wird.

5. Das Process API erhält enormen Schub

Bisher waren die mit Java zur Verfügung stehenden Fähigkeiten zur Kontrolle und Verwaltung von Betriebssystemprozessen recht begrenzt. Um beispielsweise etwas simples wie den PID zu erhalten, musste man in früheren Java-Versionen entweder auf nativen Code zugreifen oder irgend eine Art von Workaround finden. Um sicherzustellen, dass man auch die richtigen Resultate erhält, benötigte man obendrein für jede Plattform eine andere Implementierung.

Für Java 9 können Sie erwarten, dass der Code für den Abruf von Linux-PIDs, der zur Zeit etwa so aussieht …

public static void main(String[] args) throws Exception
{
    Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" });

    if (proc.waitFor() == 0)
    {
        InputStream in = proc.getInputStream();
        int available = in.available();
        byte[] outputBytes = new byte[available];

        in.read(outputBytes);
        String pid = new String(outputBytes);

        System.out.println("Your pid is " + pid);
     }
}

… sich in etwas wie das hier (das alle Betriebssystemen unterstützt) verwandelt:

  • System.out.println(“Your pid is ” + Process.getCurrentPid());

Das Update wird Javas Fähigkeit, mit dem Betriebssystem zu interagieren, erweitern: Dazu gehören u. a. neue direkte Methoden für den Umgang mit PIDs, Prozessnamen und Zuständen.

Was Sie in Java 9 nicht sehen werden

Zwei interessante Features, von denen wir angenommen hatten, dass sie Teil des nächsten Java-Releases werden würden, bleiben, wie wir mittlerweile wissen, in Java 9 außen vor:

1. Ein standardisiertes, leichtgewichtiges JSON API

Im Rahmen einer von uns durchgeführten Umfrage, an der 350 Entwickler teilnahmen, wurde das JSON API genauso gehyped wie Jigsaw; aufgrund von Finanzierungsproblemen scheint dieses es jedoch nicht in Java 9 zu schaffen. Mark Reinhold, Chefarchitekt der Java-Plattform, kommentierte dies in der JDK 9-Mailingliste folgendermaßen:

This JEP would be a useful addition to the platform but, in the grand scheme of things, it’s not as important as the other features that Oracle is funding, or considering funding, for JDK 9. We may reconsider this JEP for JDK 10 or a later release.

2. Money and Currency API

Des Weiteren scheint das ersehnte Money and Currency API keinen Support von Oracle zu genießen. Anatole Tresch, Spec Lead des API, äußerte sich auf eine entsprechende Anfrage wie folgt:

@tkfxin currently not. No support from Oracle doing so. Instead we will improve ee support and spring will support it as well 🙂
— Anatole Tresch (@atsticks) June 16, 2015

Sind Sie Java- oder Scala-Entwickler? Takipi erkennt alle Ausnahmen und Fehler in Ihrem Code und sagt Ihnen, warum sie auftreten. Die Installation nimmt nur eine Minute in Anspruch: Probieren Sie es aus.

Zuerst erschienen auf dem Takipi-Blog. Übersetzt und bearbeitet von der JAXenter-Redaktion. Aktualisiert und mit neuem Java-9-Release-Datum versehen am 20.01.2017. 

Aufmacherbild: Birthday-anniversary cake with red candles showing Nr. 9 von Shutterstock.com / Urheberrecht: Fernando Sanchez Cortes

Verwandte Themen:

Geschrieben von
Alex Zhitnitsky

Alex Zhitnitsky arbeitet bei Takipi, wo er Java- and Scala-Entwickler dabei unterstützt, Probleme in der Produktion zu beheben.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.