Java 19

KonradN

Super-Moderator
Mitarbeiter
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:
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.
 

thecain

Top Contributor

Hier ein mMn sehr spannendes Video zu Loom, zwar mit Fokus auf Quarkus, aber trotzdem sehr viele Grundlagen zu Threads, Reactive und Loom. War eine gut investierte Stunde
 

KonradN

Super-Moderator
Mitarbeiter
IntelliJ: 2022.2.2 hat bisher keine Unterstützung von Java 19
Dies muss ich revidieren - ich habe dies zwar irgendwie nicht in den Release Notes gefunden, aber man kann in den Project Settings bei Language level auch "19 - no new language settings" und "19 (Preview) - Record patterns, pattern matching for switch (third preview)" auswählen.
==> Damit scheint IntelliJ auch shon Java 19 zu unterstützen. Diese Einstellung war aber auch leicht zu übersehen, denn man muss die Liste ganz runter gehen. Es kommen erst die "LTS Versions", dann die "Other Versions" und erst am Ende "Experimental Versions".

Daher:
IntelliJ: 2022.2.2 unterstützt Java 19

Netbeans hatte doch vor kurzem auch eine neue Version (die 15) - evtl. irre ich mich da also auch, aber das habe ich jetzt nicht überprüft. Das kann evtl. ein Anwender mit Netbeans machen. (@mihe7 Du nutzt Netbeans oder habe ich das falsch in Erinnerung?)
 

TM69

Bekanntes Mitglied
Ich persönlich würde nur auf LTS setzen, denn wer weis was wieder rausfliegt und was drin bleibt. Die letzte LTS (17) hat nicht viel neues gebracht. In 19 sind aber ein paar interssante Aspekte schon enthalten.

Für Hobby-Programmierer ist dieses wohl eher interessant.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich persönlich würde nur auf LTS setzen, denn wer weis was wieder rausfliegt und was drin bleibt. Die letzte LTS (17) hat nicht viel neues gebracht. In 19 sind aber ein paar interssante Aspekte schon enthalten.
LTS gibt es aus JDK-Sicht nicht, da ist 19 nicht anders als 17 - beide enthalten, genauso wie nahezu jede Version seit 9(?), Preview-Features, die wieder rausfliegen können.

Je nach Sichtweise brachte 17 auch mehr Neues als 19.
 

KonradN

Super-Moderator
Mitarbeiter
Also man hat hier zwei unterschiedliche Dinge:
  • LTS vs non LTS
  • Preview Features

Das sind aber zwei unterschiedliche Dinge und in keiner Weise getrennt. Auch eine LTS Version kann Preview Features haben.

Die Idee einer LTS Version ist ja, dass man auf eine Version setzt um dann an dieser festzuhalten. Also dieses "never change a running system". Das ist oft ein Zeichen dafür, dass Änderungen generell hoch komplex sind, Tests schwierig und aufwändig und immer mit einem hohen Risiko verbunden. Früher durchaus üblich aber der derzeit aktuelle Ansatz ist doch eher ein anderer (und der hat sich die letzten 20 Jahre gut durchgesetzt).

Updates kommen nicht direkt ins Produkt, aber ein Build zeigt mir auch, wo es neue Versionen gibt. Und dann gibt es einen Branch, in dem wir einfach mal aktualisieren und den Build laufen lassen.
Und dann hat man ein Backlog Item, das man bewerten kann; Will man von Abhängigkeit xyz von Version a auf Version b aktualisieren? Inkl. minimaler Bewertung (Ist im Maven Repository schon ein cve hinterlegt? Liefen alle Tests?)

Daher ist so ein Wechsel auf aktuelle Versionen durchaus möglich und etwas, das Entwickler in der Regel wollen. Die neuen Features kommen ja, weil die Entwickler dies gut finden und haben wollen (Um das mal so platt auszudrücken).

Das was angesprochen wurde, sind preview Features - die würde ich produktiv auch nie nutzen, denn da ist die Gefahr groß, dass jedes Nutzen eines Preview Features bei einer zukünftigen Aktualisierung angepasst werden muss. Und das will man vermeiden.

Aber selbstverständlich schaue ich mir die auch schon einmal an. Ein kleines Projekt, das auch preview Features nutzt um dann z.B. mit virtuellen Threads zu spielen. Das spiel JETZT noch keine Rolle. Aber wir schauen uns das an. Und sowas stellt man dann im Team / der Abteilung auch einmal vor. Denn klar ist: Das wird kommen. Project Loom wird jetzt nicht plötzlich gecancelt :) Die Previews sind keine Versuche um festzustellen, ob es so gut ist. Es ist eine erste Implementierung einer Idee, die kommen soll. Die Chance, dass das als Schnapsidee abgetan wird, ist also extrem klein und ich kenne gerade kein JSR das dann direkt gecancelt wurde nach einer Preview. Ich sehe immer etwas wie "Preview 1, Preview2, Preview 3, final".
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
T Java Robot Class - Bot Allgemeine Java-Themen 3
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
izoards Java Home Pfad unabhängig von der Version Allgemeine Java-Themen 7
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
berserkerdq2 Java sql Allgemeine Java-Themen 15
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
Aartiyadav Comparisons and Swapa in Bubble-sort Java Allgemeine Java-Themen 6
KonradN Java 18 Allgemeine Java-Themen 8
N Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java Allgemeine Java-Themen 9
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
M Verständnisfrage java.util.TimerTask Allgemeine Java-Themen 2
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
O Newton Algorithmus Java Allgemeine Java-Themen 1
P Java Quellen finden Allgemeine Java-Themen 3
M Java Analyse/ SWOT-Analyse Allgemeine Java-Themen 13
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
Atten007 Java-Klasse auf macOS entpacken? Allgemeine Java-Themen 2
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
M Warum hat Java dieses und jenes nicht... Allgemeine Java-Themen 8
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18

Ähnliche Java Themen

Neue Themen


Oben