Java die 13’te

16.09.2019

Alle halbe Jahre wieder – erscheint ein neues Java-Release. Am morgigen Dienstag, 17.09.2019, ist es wieder soweit: Java 13 wird veröffentlicht.

Folgende Funktionalitäten wurden im Rahmen der Entwicklung des Releases fertig gestellt, und halten Einzug in Java 13:

Dynamic CDS Archives (JEP-350)

CDS („Class Data Sharing“) ist ein Feature der Java-VM, mit dem der Start von Anwendungen beschleunigt werden kann. Dafür wird die interne Repräsentation geladener Klassen in einer speziellen Archiv-Datei gespeichert, die beim VM-Start in den Arbeitsspeicher gemappt wird. So können die im Archiv enthaltenen Klassen direkt verwendet werden, ohne dass sie zuvor geladen werden müssen. Das spart die Zeit für das Laden der Klassen beim Startup. Zudem können mehrere gleichzeitig laufende Java-Programmen dasselbe Archiv nutzen, was den Memory-Footprint über alle laufenden Anwendungen hinweg reduzieren kann.

JEP-350 ist eine Erweiterung von CDS, die es erlaubt, CDS-Archive beim Beenden einer Java-Anwendung zu erzeugen. Damit entfällt der Schritt, sich mit Hilfe von Probeläufen eine Liste der von einer Anwendung geladenen Klassen erstellen zu lassen, mit der wiederum die CDS-Archivdatei erzeugt werden kann.

ZGC: Uncommit Unused Memory (JEP-351)

Der ZGC („Z Garbage Collector“) wurde so angepasst, dass nicht mehr genutzter Arbeitsspeicher an das Betriebssystem zurückgegeben wird, was in den vorangegangenen Versionen nicht der Fall war. Dies kommt vor allem solchen Anwendungen zugute, bei denen der Speicherverbrauch ein kritisches Thema ist, z.B. wenn sie in Containerumgebungen laufen, wo für genutzte Ressourcen bezahlt werden muss.

Reimplement the Legacy Socket API (JEP-353)

Die Implementierung der java.net.Socket– sowie java.net.ServerSocket-API ist eine Altlast in Form eines Mix aus C- und Javacode, der schlecht zu warten, debuggen und zu erweitern ist. Sie wird durch eine neue, moderne Implementierung ersetzt, der die Eigenschaften Wartbarkeit und Erweiterbarkeit zum Ziel gesetzt wurden. Davon profitiert mitunter das Loom-Projekt, das sich mit der Einführung von „Fibres“ beschäftigt (dabei handelt es sich um eine leichtgewichtige Variante von Threads, auch bekannt als Coroutines aus Kotlin bzw. „Goroutines“ aus Go).

Switch Expressions (Preview) (JEP-354)

Switch Expressions waren bereits in Java 12 als Preview-Feature[1] enthalten, damals unter JEP-325. Siehe hierzu auch meinen Blogbeitrag zum Erscheinen von Java 12. Aufgrund des Feedbacks zur Preview-Funktionalität wurden die Switch Expressions noch einmal überarbeitet. Statt „break with value“, also der Angabe eines Werts nach dem break-Statement, wird der vom Ausdruck zurückzuliefernde Wert mit der Anweisung „yield“ gekennzeichnet:

int j = switch (day) {
    case MONDAY  -> 0;
    case TUESDAY -> 1;
    default      -> {
        int k = day.toString().length();
        int result = f(k);
        yield result;
    }
};

bzw. in Schreibweise des herkömmlichen switch-Statements:

int result = switch (s) {
    case "Foo": 
        yield 1;
    case "Bar":
        yield 2;
    default:
        LOG.info("Neither Foo nor Bar, hmmm...");
        yield 0;
};

Die neue Version mit „yield“ findet sich, wiederum als Preview-Feature, in Java 13 wieder.

Text Blocks (Preview) (JEP-355)

Preview-Feature für Textblöcke. Dabei handelt es sich um mehrzeilige String-Literale, deren enthaltene Zeichen nicht interpretiert werden. Escape-Sequenzen (wie z.B. für das doppelte Anführungszeichen) sind in der Regel also unnötig, was das Verfassen und Lesen von Textblöcken im Vergleich zu herkömmlichen Strings vereinfacht. Dies erleichtert insbesondere die Lesbarkeit von Java-Code, der Strings mit Code aus anderen Sprachen enthält, wie z.B. JSON, XML, SQL, aber auch Groovy, JavaScript oder ähnliche.

[1] Preview Features sind neue Funktionen, die nur genutzt werden können, wenn sie per Kommandozeilenparameter aktiviert werden. Sie ermöglichen es Entwicklern, neue Features auszuprobieren und Feedback dazu zu geben. Preview Features sind zwar schon recht ausgereift, können sich aber durchaus nochmal ändern – wie man am Beispiel der Switch Expressions sehen kann – bevor sie offiziell in die Sprache aufgenommen werden.

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*