- Oracle hat die Veröffentlichung von Java 24 (JDK 24) offiziell bekannt gegeben
- JDK 24 ist die Referenzimplementierung der in JSR 399 des JCP festgelegten Java SE Platform Version 24 und wurde über den JDK Release Process (JEP 3) veröffentlicht
[Zusammenfassung nach JEP]
-
JEP 404: Generational Shenandoah (experimentell)
- Unterstützt generationenbasierte Sammlung in Shenandoah GC und verbessert so die Performance
-
JEP 450: Compact Object Headers (experimentell)
- Reduziert in der HotSpot JVM die Größe von Objekt-Headern von 96–128 Bit auf 64 Bit
- Erwartete Effekte sind geringerer Heap-Bedarf, höhere Deployment-Dichte und bessere Datenlokalität
-
JEP 472: Prepare to Restrict the Use of JNI
- Fügt Warnungen bei der Verwendung von JNI (Java Native Interface) hinzu
- Liefert konsistente Warnungen auch in der Foreign Function & Memory (FFM) API
- Die Warnungen bereiten auf künftige Nutzungseinschränkungen von JNI und der FFM API vor
- Bei Bedarf kann die Schnittstelle in Anwendungen optional aktiviert werden
-
JEP 475: Late Barrier Expansion for G1
- Vereinfacht die Barrier-Implementierung des G1 Garbage Collectors
- Verschiebt die Expansion der Barriers im C2-JIT-Compiler von einer frühen in eine spätere Phase
-
JEP 478: Key Derivation Function API (Vorschau)
- Führt eine Key Derivation Function (KDF) API für kryptografische Schlüsselableitung ein
- Erlaubt die Ableitung zusätzlicher Schlüssel aus geheimen Schlüsseln und anderen Daten
-
JEP 483: Ahead-of-Time Class Loading & Linking
- Macht Anwendungsklassen beim Start der HotSpot JVM sofort verfügbar
- Speichert den einmal geladenen und gelinkten Zustand im Cache, um spätere Starts zu beschleunigen
-
JEP 484: Class-File API
- Bietet eine Standard-API zum Parsen, Erzeugen und Transformieren von Java-Class-Files
-
JEP 485: Stream Gatherers
- Unterstützt benutzerdefinierte Zwischenoperationen in der Stream API
- Ermöglicht Datentransformationen, die mit bestehenden Zwischenoperationen schwer umzusetzen sind
-
JEP 486: Permanently Disable the Security Manager
- Der Security Manager war nie das primäre Sicherheitsmittel für clientseitigen Code
- Wurde in Java 17 (JEP 411) zur Entfernung vorgesehen und wird nun deaktiviert
- Die Security-Manager-API soll in einer künftigen Version vollständig entfernt werden
-
JEP 487: Scoped Values (vierte Vorschau)
- Führt Scoped Values ein, um unveränderliche Daten innerhalb eines Threads mit Kind-Threads zu teilen
- Kann Speicher- und Zeitkosten im Vergleich zu Thread-Local-Variablen senken
- In Kombination mit Virtual Threads und Structured Concurrency werden Performance-Vorteile erwartet
-
JEP 488: Primitive Types in Patterns, instanceof, and switch (zweite Vorschau)
- Unterstützt primitive Typen beim Pattern Matching
- Erlaubt die Verwendung aller primitiven Typen in
instanceof und switch
-
JEP 489: Vector API (neunter Incubator)
- Führt eine API für Vektoroperationen ein
- Wird zu Vektor-Instruktionen kompiliert und verspricht bessere Performance als skalare Operationen
-
JEP 490: ZGC: Remove the Non-Generational Mode
- Entfernt den nicht-generationenbasierten Modus von ZGC und setzt den generationenbasierten Modus als Standard
-
JEP 491: Synchronize Virtual Threads without Pinning
- Verbessert
synchronized, damit Virtual Threads Plattform-Threads freigeben können
- Verhindert, dass Virtual Threads an Plattform-Threads festgebunden werden, und verbessert so Performance und Skalierbarkeit
-
JEP 492: Flexible Constructor Bodies (dritte Vorschau)
- Erlaubt Anweisungen vor expliziten Konstruktoraufrufen (
super(..), this(..))
- Ermöglicht die Initialisierung von Feldern, bevor eine Instanz vollständig initialisiert ist
-
JEP 494: Module Import Declarations (zweite Vorschau)
- Fügt Deklarationen hinzu, um von Modulen exportierte Pakete einfacher zu importieren
- Vereinfacht die Wiederverwendung modularisierter Bibliotheken
-
JEP 495: Simple Source Files and Instance Main Methods (vierte Vorschau)
- Unterstützt einfache Source-Files und Methoden, die auch Einsteiger leicht schreiben können
- Ermöglicht das Schreiben einfacher Programme ohne komplexen Code
-
JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
- Führt den quantenresistenten Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM) ein
- Stärkt die Sicherheit symmetrischer Schlüssel und bereitet auf Angriffe durch Quantencomputing vor
-
JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
- Führt den quantenresistenten Module-Lattice-Based Digital Signature Algorithm (ML-DSA) ein
- Verbessert den Schutz vor Datenmanipulation und die Authentifizierung des Unterzeichners
- Dient der Vorbereitung auf künftige Angriffe durch Quantencomputing
-
JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
- Gibt Warnungen bei der Nutzung von Speicherzugriffsmethoden in
sun.misc.Unsafe aus
- Empfiehlt die Migration zur VarHandle API und zur FFM API
-
JEP 499: Structured Concurrency (vierte Vorschau)
- Führt Structured Concurrency ein, um zusammengehörige Aufgabengruppen als eine einzelne Arbeitseinheit zu behandeln
- Vereinfacht Fehlerbehandlung und Abbruch und verbessert Zuverlässigkeit sowie Sichtbarkeit
[Zusammenfassung der neuen Funktionen in JDK 24]
-
Configurable New Session Tickets Count for TLSv1.3
-
Mechanism to Disable TLS Cipher Suites by Pattern Matching
- In der Konfigurationsdatei
java.security können über die Property jdk.tls.disabledAlgorithms TLS Cipher Suites deaktiviert werden
- Unterstützt Pattern Matching (Wildcard
_ kann verwendet werden)
- Beispiel:
"TLS_RSA_*" deaktiviert alle Cipher Suites, die mit TLS_RSA beginnen
-
New Option to Extract a JAR File to a Specific Directory Using the jar Tool
-
New Reader.of(CharSequence) Method
- Fügt die neue statische Factory-Methode
java.io.Reader.of(CharSequence) hinzu
- Unterstützt effizientes Lesen aus
String, StringBuilder usw.
-
New Method Process.waitFor(Duration)
- Fügt die Methode
java.lang.Process#waitFor(Duration) hinzu
- Vermeidet Verwirrung bei der Einheitenspezifikation in der bisherigen
waitFor()-Methode
-
Support for Unicode 16.0
- Fügt Unterstützung für Unicode 16.0 hinzu
- Insgesamt 154.998 Zeichen und 7 neue Schriften wurden ergänzt
- Garay (Westafrika)
- Gurung Khema, Kirat Rai, Ol Onal, Sunuwar (Indien und Nepal)
- Todhri (Albanien)
- Tulu-Tigalari (Südwestindien)
-
New JAR Command Option to Not Overwrite Existing Files
-
New MXBean to Monitor and Manage Virtual Thread Scheduler
- Fügt das Interface
jdk.management.VirtualThreadSchedulerMXBean hinzu
- Ermöglicht das Monitoring von Status und Parallelität des Virtual-Thread-Schedulers
- Die Zielparallelität des Schedulers kann dynamisch geändert werden
-
New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers
- Fügt dem Tool
jcmd neue Befehle hinzu
Thread.vthread_scheduler: Gibt den Status des Thread-Schedulers aus
Thread.vthread_pollers: Gibt den Status der I/O-Poller aus
-
Support for Including Security Properties Files
- In der Konfigurationsdatei
java.security können andere Property-Dateien eingebunden werden
- Verwendet
include <Dateipfad>
- Das Schlüsselwort
include kann nicht als Property-Name verwendet werden
-
Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature
- Dokumentiert Standard-Hash- und MGF-Algorithmen für die RSASSA-PSS-Signatur
-
SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism
- Fügt Unterstützung für AES/CTS-Transformationen im SunPKCS11-Provider hinzu
- Fügt die neue Konfigurations-Property
cipherTextStealingVariant hinzu (CS1, CS2, CS3)
- Für NSS ist der Standardwert CS1
-
New Summary Page for External Specifications
- Fügt eine Übersichtsseite hinzu, auf der externe Spezifikationen, auf die Java SE und die JDK API verweisen, gesammelt dargestellt werden
-
jpackage Supports WiX Toolset v4 and v5 on Windows
jpackage unterstützt jetzt WiX Toolset v4 und v5
- Wählt automatisch die neueste installierte Version aus
- Konvertiert benutzerdefinierte Quellen im WiX-v3-Format automatisch in das v4-Format
-
Add W3C DTDs and XSDs to the JDK Built-in Catalog
- Fügt dem integrierten XML-Katalog des JDK W3C-DTDs und -XSDs hinzu
- Kann sie lokal ohne Netzwerk laden
- Hinzugefügte Einträge:
- XML-Namespace
- XML Schema Teil 1 & 2
- XHTML 1.0 & 1.1
- W3C-XML-Spezifikations-DTD
4 Kommentare
Project Valhalla ist schon sehr lange in Entwicklung, und ich hoffe, dass es zu einem guten Ergebnis kommt.
Ich persönlich erwarte vor allem, dass die flache Struktur von Value Classes Pointer-Referenzen reduziert und dadurch Vorteile bei der Speicherzugriffsgeschwindigkeit bringt.
Es steht stark unter dem (positiven) Einfluss von Kotlin. In letzter Zeit bin ich mit der Verwendung der Sprache Kotlin wirklich sehr zufrieden, und ich unterstütze auch Java, das man als ihren Ursprung bezeichnen könnte.
Structured Concurrency und Scoped Value wecken bei mir sehr große Erwartungen.
Hacker-News-Kommentare
Der
SecurityManagerist still und leise verschwunden. Ein Professor, der früher einen Java-Wahlkurs unterrichtete, betonte oft die Vorteile desSecurityManager. Damals war ich sehr skeptisch, und jetzt bin ich zufrieden, dass sich diese Skepsis als richtig erwiesen hatIch möchte, dass die Vorschau auf strukturierte Nebenläufigkeit endet. Das hilft Java dabei, die letzte Lücke zu Go bei der Einfachheit der Nebenläufigkeitsprogrammierung zu schließen. Go macht Channels und Wait Groups einfach. Strukturierte Nebenläufigkeit macht es mit diesen Grundbausteinen leichter, Aufgaben auf höherer Ebene zu schreiben und zu verstehen
Dass es kein Pinning virtueller Threads mehr gibt, ist ein großer Vorteil. Jetzt kann man virtuelle Threads nahezu ohne Einschränkungen verwenden
Es ist schön zu sehen, dass Streams immer noch beliebt sind. Bei uns im Unternehmen führen wir viele Interviews im FizzBuzz-Stil, und Leute, die Java wählen und Streams verwenden, bestehen in der Regel. Das zeigt die Ergonomie und Intuitivität der Sprache sowie die Stärke von Abstraktion. Java-Streams sind genauso mächtig wie funktionale Operationsketten im Ruby-Stil, liefern aber tatsächlich gute Performance
Neue Funktionen: Link zum OpenJDK-24-Projekt
ARM32- und Risc-V-Releases sind bald hier verfügbar
Raspberry 2 und Vision Five 2 sind sehr zukunftsorientierte Hardware, die von Oracle und OpenJDK ignoriert wird
Frage zu den Lizenzunterschieden zwischen der Nutzung von OpenJDK und den offiziellen Oracle-JDK-Releases
Erstaunlich, dass JEP 491 noch nicht erwähnt wurde. Es stellt sicher, dass das Schlüsselwort
synchronizedvirtuelle Threads nicht kaputtmacht. Das ist ein großer Vorteil, wenn bestehender Code auf virtuellen Threads ausgeführt wirdDas Versionswachstum von Java war in den letzten Jahren interessant. Über Java 9, 10 und 11 LTS hinweg verwende ich immer noch Java 8. Es gibt einfach zu viel zu tun
Wenn man aktuelle Java-Versionen mit Kotlin vergleicht, verbessert sich Java weiter und übernimmt Funktionen von Kotlin, aber auch Kotlin entwickelt sich eigenständig weiter
GraalVM ist ebenfalls für Java 24 verfügbar. Es gibt viele gute Funktionen
Das Pinning bei virtuellen Threads ist endlich verschwunden