Java 19 steht vor der Tür und vielleicht ist der eine oder andere ja neugierig, was da in Kürze auf uns zu kommt.
Release Plan: https://openjdk.org/projects/jdk/19/
Nach der aktuellen Planung ist generelle Verfügbarkeit für den 20.09.22 geplant - morgen dürften also die ersten Builds auftauchen.
Es gibt einige, die da bestimmst schon sehnsüchtig drauf warten, aber diejenigen, die sich hier weniger damit beschäftigen, kann ich hier ja einmal versuchen, etwas neugierig zu machen. Ich halte meine Aussagen hier bewusst oberflächig und gehe nicht in die Tiefe, aber ich werde Links anbieten, damit man es selbständig vertiefen kann (diese sind in der Regel aber auf Englisch) oder man kann da gerne bei Bedarf auch nachfragen und es weiter ausführen (ggf. in einem neuen Thread - dann kann man sich hier mehr auf die neue Java Version beschränken e.g. kurze Hinweise zur Unterstützung in Entwicklungsumgebungen oder wann sowas bei welchem Anbieter verfügbar ist.)
Aus meiner Sicht das wichtigste neue Feature: JEP 425 Virtual Threads. (Preview)
Dies ist ein sehr interessanter Ansatz um mit (sehr) vielen Threads gleichzeitig zu arbeiten. Die Verwaltung und das Umschalten zwischen Threads ist relativ aufwendig, so dass ein System schnell an seine Grenzen kommt. Erst von der Performance bis hin zu einem Zustand, dass es nicht einmal mehr richtig läuft. In einigen Sprachen sind hier async/await Konstrukte eingeführt worden, die hier unterstützen sollen was aber von der Nutzung her nicht unbedingt so sehr auf Gegenliebe bei allen Entwicklern stößt.
Diese neue Implementation, welche unter dem Codenamen Loom schon einige Jahre entwickelt wurde (ab 2017), findet nun seinen Weg in das JDK und wird damit generell verfügbar.
Wer schon mit Threads arbeitet, der muss seinen Code nicht zu sehr anpassen. Ggf. reicht es schon aus, einfach ein Thread.start mit Thread.startVirtualThread zu ersetzen. Wobei in der Regel Frameworks benutzt werden, die dann auch für das Threading zuständig sind und man wird dann warten müssen, ob und wie diese dann auf diese neue Möglichkeit zugreifen werden.
Durch den geringen Overhead bei den virtuellen Threads ist es nun aber problemlos möglich mit Pattern zu arbeiten wie "Thread per Request" und man benötigt keinerlei Thread Pooling oder so. (Das soll sogar explizit nicht verwendet werden!)
Paar Links zu Virtual Threads:
JEP 405 - Record Patterns (Preview)
Garantiert nicht unwichtig - aus meiner Sicht das Füllen einer Lücke:
Wir kannten ja schon das Pattern matching für instanceof aus JEP 394:
um direkt die Variable s vom Typ String zu haben. Dies ging bisher aber nicht mit Records und wird mit diesem JEP auch für Records ermöglicht.
JEP 427 - Pattern Matching for switch (3. Preview)
Die 3. Preview um in einem switch auf den Typ einzugehen. Also etwas wie:
JEP 426 - Vector API (4. Incubator)
Die Arbeit an der Vector API ist weiter gegangen. Interessiert mich selbst eher weniger und ich habe diese bisher nicht näher betrachtet. Das werde ich hier erst machen, wenn die API final ist.
==> Hier beachten: Diese "Incubator" Module geben Entwicklern bereits unfertige APIs an die Hand. Die Arbeit ist aber noch nicht abgeschlossen und die APIs können sich noch weiter verändern! (Siehe auch JEP 11)
JEP 428 - Structured Concurrency (Incubator)
Diese API ist recht interessant und sollte helfen, in eine multithreaded Applikation mehr Ordnung zu bringen. Die Kernidee ist dabei, dass man als Entwickler in einem StructuredTaskScope eine Gruppe von zusammen gehörenden, parallelen SubTasks organisieren kann um diese als eine Einheit zu betrachten. Die Dokumentation in dem JEP zeigt dies auch relativ schön an einem Beispiel auf.
Unterstützung in Entwicklungsumgebungen
IntelliJ: 2022.2.2 hat bisher keine Unterstützung von Java 19
Eclipse: 2022-09 kommt mit Java 19 Unterstützung
Netbeans: 15 ist die aktuelle Version und in den Release Notes auch keine Erwähnung von Java 19.
Das einfach einmal ein erster Post von meiner Seite, morgen / spätestens übermorgen kann ich hoffentlich Informationen zum Release bringen.
Release Plan: https://openjdk.org/projects/jdk/19/
Nach der aktuellen Planung ist generelle Verfügbarkeit für den 20.09.22 geplant - morgen dürften also die ersten Builds auftauchen.
Es gibt einige, die da bestimmst schon sehnsüchtig drauf warten, aber diejenigen, die sich hier weniger damit beschäftigen, kann ich hier ja einmal versuchen, etwas neugierig zu machen. Ich halte meine Aussagen hier bewusst oberflächig und gehe nicht in die Tiefe, aber ich werde Links anbieten, damit man es selbständig vertiefen kann (diese sind in der Regel aber auf Englisch) oder man kann da gerne bei Bedarf auch nachfragen und es weiter ausführen (ggf. in einem neuen Thread - dann kann man sich hier mehr auf die neue Java Version beschränken e.g. kurze Hinweise zur Unterstützung in Entwicklungsumgebungen oder wann sowas bei welchem Anbieter verfügbar ist.)
Aus meiner Sicht das wichtigste neue Feature: JEP 425 Virtual Threads. (Preview)
Dies ist ein sehr interessanter Ansatz um mit (sehr) vielen Threads gleichzeitig zu arbeiten. Die Verwaltung und das Umschalten zwischen Threads ist relativ aufwendig, so dass ein System schnell an seine Grenzen kommt. Erst von der Performance bis hin zu einem Zustand, dass es nicht einmal mehr richtig läuft. In einigen Sprachen sind hier async/await Konstrukte eingeführt worden, die hier unterstützen sollen was aber von der Nutzung her nicht unbedingt so sehr auf Gegenliebe bei allen Entwicklern stößt.
Diese neue Implementation, welche unter dem Codenamen Loom schon einige Jahre entwickelt wurde (ab 2017), findet nun seinen Weg in das JDK und wird damit generell verfügbar.
Wer schon mit Threads arbeitet, der muss seinen Code nicht zu sehr anpassen. Ggf. reicht es schon aus, einfach ein Thread.start mit Thread.startVirtualThread zu ersetzen. Wobei in der Regel Frameworks benutzt werden, die dann auch für das Threading zuständig sind und man wird dann warten müssen, ob und wie diese dann auf diese neue Möglichkeit zugreifen werden.
Durch den geringen Overhead bei den virtuellen Threads ist es nun aber problemlos möglich mit Pattern zu arbeiten wie "Thread per Request" und man benötigt keinerlei Thread Pooling oder so. (Das soll sogar explizit nicht verwendet werden!)
Paar Links zu Virtual Threads:
- https://developer.okta.com/blog/2022/08/26/state-of-java-project-loom
- alt aber in Deutsch: https://entwickler.de/java/blick-in-die-fernere-zukunft
JEP 405 - Record Patterns (Preview)
Garantiert nicht unwichtig - aus meiner Sicht das Füllen einer Lücke:
Wir kannten ja schon das Pattern matching für instanceof aus JEP 394:
if (obj instanceof String s) {
um direkt die Variable s vom Typ String zu haben. Dies ging bisher aber nicht mit Records und wird mit diesem JEP auch für Records ermöglicht.
JEP 427 - Pattern Matching for switch (3. Preview)
Die 3. Preview um in einem switch auf den Typ einzugehen. Also etwas wie:
Java:
return switch (o) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.toString();
};
JEP 426 - Vector API (4. Incubator)
Die Arbeit an der Vector API ist weiter gegangen. Interessiert mich selbst eher weniger und ich habe diese bisher nicht näher betrachtet. Das werde ich hier erst machen, wenn die API final ist.
==> Hier beachten: Diese "Incubator" Module geben Entwicklern bereits unfertige APIs an die Hand. Die Arbeit ist aber noch nicht abgeschlossen und die APIs können sich noch weiter verändern! (Siehe auch JEP 11)
JEP 428 - Structured Concurrency (Incubator)
Diese API ist recht interessant und sollte helfen, in eine multithreaded Applikation mehr Ordnung zu bringen. Die Kernidee ist dabei, dass man als Entwickler in einem StructuredTaskScope eine Gruppe von zusammen gehörenden, parallelen SubTasks organisieren kann um diese als eine Einheit zu betrachten. Die Dokumentation in dem JEP zeigt dies auch relativ schön an einem Beispiel auf.
Unterstützung in Entwicklungsumgebungen
IntelliJ: 2022.2.2 hat bisher keine Unterstützung von Java 19
Eclipse: 2022-09 kommt mit Java 19 Unterstützung
Netbeans: 15 ist die aktuelle Version und in den Release Notes auch keine Erwähnung von Java 19.
Das einfach einmal ein erster Post von meiner Seite, morgen / spätestens übermorgen kann ich hoffentlich Informationen zum Release bringen.