Java 9 Features

Es gibt bereits die ersten Early Access Versionen von Java 9, zu finden unter JDK 9 Download – Early Access. Offiziell soll Java 9 im Herbst 2016 erscheinen. Hier bekommt ihr einen Einblick in die kommenden Features.

Inhaltsverzeichnis

  1. Projekt Jigsaw – Modularer Source Code
  2. Erweiterung der Process API
  3. Leichtgewichtige JSON API
  4. Money und Currency API
  5. Lock/Thread Contention Verbesserung
  6. Mehrteiliger Code Cache
  7. Verbesserung der Java Kompilation
  8. HTTP 2 Client
  9. REPL in Java
  10. Einheitliches JVM Logging
  11. Mehr Kontrolle über den Compiler
  12. Datagram Transport Layer Security (DTLS)
  13. HTML5 Javadoc

Zeitplan

Datum Stadium
10.12.2015 Feature Complete
04.02.2016 All Tests run
25.02.2016 Rampdown Start
21.04.2016 Zero Bug Bounce
16.06.2016 Rampdown Phase 2
21.07.2016 Final Release Candidate
22.09.2016 General Availability

Quelle: http://mail.openjdk.java.net/pipermail/jdk9-dev/2015-May/002172.html

1. Project Jigsaw – Modularer Source Code

Das Ziel von Project Jigsaw ist es, Java modularer zu machen und die JRE (Java Runtime Environment) in interoperable Komponenten aufzubrechen. Das wird die Struktur des JDK/JRE jedoch zunächst nicht verändern. Der Sinn dahinter, ist die Reorganisierung des Source Codes in einzelne Module, die dann wiederrum kompilierbar sind. Eigentlich sollte dieses Feature bereits in Java 8 erscheinen, ist jedoch auf Java 9 verlegt worden.

Wenn das Project Jigsaw vervollständigt ist, könnte man die Runtime Jar (rt.jar) aufbrechen und so anpassen, dass sie genau auf das Projekt passt. Die Motivation dahinter ist, Java für kleinere Geräte (Internet of Things) verfügbar zu machen, un die Sicherheit und Performance zu verbessern. Außerdem vereinfacht es den Entwicklern, die Bibliothek zu warten und zu erstellen.

Mehr darüber unter JEP 201

2. Process API Updates

Bisher gibt es nur wenige Möglichkeiten Systemprozesse zu kontrollieren und zu verwalten. Um z.B. die ProcessID (PID) zu bekommen, müsste man mehre Implementationen für die jeweiligen Plattformen schreiben.

Folgender Code wird in Java 8 genutzt, um unter Linux die PID abzufragen.

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);
}
}

In Java 9 könnte das Ganze dann in etwas so aussehen

System.out.println("Your pid is " + Process.getCurrentPid())
 Diese Erweritung erlaubt Java die Interaktionen mit dem Betriebssystem: Direkte Methoden zum Handhaben der PIDs, Prozessnamen und Statu, die Möglichkeit durch die JVMs und Prozesse zu iterieren und vieles Mehr.

Mehr dazu unter JEP 102

3. Leichtgewichtige JSON API

Es gibt bereits diverse Alternativen für das Handhaben von JSON in Java. Der Unterschied hier ist jedoch, dass die JSON API Teil von Java wird, leichtgewichtig ist und auf die neuen Fähigkeiten von Java 8 aufbaut. Die JSON API wird direkt über java.util verfügbar sein.

Mehr dazu unter JEP 198

4. Money and Currency API

Nach der neuen Datums- und Zeit API in Java 8, bringt Java 9 nun eine offizielle API zum Anzeigen, Berechnen und Transpotieren von Geldbeträgen und Währungen. Mehr Details und Codesamples findet ihr auf JavaMoney – Github. Einige Codeauszüge…

Money amt1 = Money.of(10.1234556123456789, "USD"); // Money is a BigDecimal
FastMoney amt2 = FastMoney.of(123456789, "USD"); // FastMoney is up to 5 decimal places
Money total = amt1.add(amt2);
MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat(Locale.GERMANY);
 
System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD

Mehr dazu unter JSR 354

5. Lock/Thread Contention Verbesserung

Lock Contention ist ein Zustand, bei dem ein Thread auf ein Objekt bzw. eine Sperrung wartet, da sie zurzeit von einem anderen Thread genutzt wird. Daher kann der Thread das Objekt nicht nutzen, solange der andere Thread es nicht wieder entsperrt hat.

Diese Lock contention bereits echte Performance-Probleme in multithreaded Anwendungen. Laut Benchmarks soll Java 9 eine Verbesserung in der Performance bieten. Einer dieser Tests ist Volano. Es simuliert einen Chat-Server mit einer riesigen Anzahl an Threads und Client-Verbindungen, wovon viele auf die gleichen Ressourcen zugreifen wollen.

Diese Benchmarks bringen die JVMs an ihr Limit und versuchen den maximalen Durchsatz zu erreichen, grundsätzlich gemessen in Nachrichten/Sekunde. Die Performanceverbesserung zeigt sich in 22 verschiedenen Benchmarks.

Mehr dazu unter JEP 143

6. Mehrteiliger Code Cache

Java Hierachie
Java Hierachie

Die Performanceverbesserung bezieht sich auf den JIT-Compiler (Just-In-Time). Wenn bestimmte Bereiche des Codes sehr schnell hintereinander ausgeführt werden, kompiliert die JVM den nativen Code und speichert ihn in einem Cache. Dieser Code Cache soll unter Java 9 nun in drei verschiedene Bereiche aufgeteilt werden.

  • Code, der für immer im Cache bleibt
  • Kurze Lebenszeit
  • Möglicherweise eine lange Lebenszeit

Diese Aufteilung ermöglicht diverse Performanceverbesserungen.

Mehr dazu unter JEP 197

7. Verbesserung der Java Kompilation

Das Java Smart Compilation Tool, unter sjavac bekannt, wurde entwickelt, um das Kompilieren vom JDK zu beschleunigen, in dem der javac-Compiler auf allen Kernen läuft. In Java 9 soll dieser Kompilierer weiter verbessert und verallgemeinert werden und auch für andere Projekte, nicht nur für das JDK, verfügbar sein.

Mehr dazu unter JEP 199

8. HTTP 2 Client

Der HTTP 2 Client ist der offizielle Nachfolger des HTTP 1.1 Client und basiert auf SPDY, einem Open-Source-Protokoll von Google. Dadurch sollen unter Anderem die Latenz, der Durchsatz und die Größe der Anfragen/Antworten stark verbessert werden. Java 9 wird voraussichtlich einen neuen HTTP Client beinhalten, welcher die HTTPURLConnection ersetzt. Die Performance von HTTP 2 gegenüber seinen Vorgänger soll etwa 11 – 48 % betragen.

Mehr dazu unter JEP 110

9. REPL in Java – Project Kulla

Zurzeit gibt es keinen nativen Weg, um das sogenannte REPL (Read-Eval-Print-Loop) zu nutzen. Wenn man einige Zeilen Java-Code ausführen möchte, muss der Code in eine separate Funktion oder in ein Projekt gepackt werden. Project Kulla soll abhilfe schaffen. Takipi hat sich das Early Access Build mal geschnappt und eine kleine Einführung in REPL gegeben – Takipi – Hands On Session – REPL – Java 9.

 

10. Einheitliches JVM Logging

Zurzeit ist es noch sehr schwer, den Grund für Performanceprobleme und Crashes der JVM zu finden. Zurzeit nutzen verschiedene Komponenten der JVM verschiedene Mechanismen und Konventionen zum Logging. Java 9 will das Logging vereinheitlichen und es so deutlich einfacher machen, solche Probleme zu analysieren und das Logging zu konfigurieren.

Mehr dazu unter JEP 158

11. Mehr Kontrolle über den Compiler

Mit dieser Verbesserung soll es möglich sein, die Optionen des JIT-Compilers auch während der Laufzeit zu verändern und generell mehr Kontrolle über den Compiler zu bekommen.

Mehr dazu unter JEP 165

12. Datagram Transport Layer Security (DTLS)

Datagram Transport Layer Security (DTLS) ist ein auf TLS basierendes Verschlüsselungsprotokoll, das im Gegensatz zu TLS auch über unzuverlässige Transportprotokolle wie UDP übertragen werden kann. Java 9 bietet unterstützung für DTLS.

Mehr dazu unter JEP 219

13. HTML5 Javadoc

Zukünftig soll Javadoc HTML5 generieren.

Mehr dazu JEP 224


 

Quelle: Takipi – Java 9 Features

Comments

comments

Leave a Reply