JDK 24 Changelog: All New Features
A complete list of features and JEPs in JDK 24 (March 2025), including the Class-File API, Stream Gatherers, and post-quantum cryptography (ML-KEM/ML-DSA).
JDK 24 Changelog
JDK 24 was released on 18 March 2025 and is an extremely feature-rich release with no fewer than 24 JEPs. The highlights include the Class-File API and Stream Gatherers becoming standard, plus new post-quantum cryptography APIs (ML-KEM and ML-DSA).
JEP Summary
| JEP Number | Feature |
|---|---|
| 404 | Generational Shenandoah (Experimental) |
| 450 | Compact Object Headers (Experimental) |
| 472 | Prepare to Restrict the Use of JNI |
| 475 | Late Barrier Expansion for G1 |
| 478 | Key Derivation Function API (Preview) |
| 479 | Remove the Windows 32-bit x86 Port |
| 483 | Ahead-of-Time Class Loading & Linking |
| 484 | Class-File API |
| 485 | Stream Gatherers |
| 486 | Permanently Disable the Security Manager |
| 487 | Scoped Values (Fourth Preview) |
| 488 | Primitive Types in Patterns, instanceof, and switch (Second Preview) |
| 489 | Vector API (Ninth Incubator) |
| 490 | ZGC: Remove the Non-Generational Mode |
| 491 | Synchronize Virtual Threads without Pinning |
| 492 | Flexible Constructor Bodies (Third Preview) |
| 493 | Linking Run-Time Images without JMODs |
| 494 | Module Import Declarations (Second Preview) |
| 495 | Simple Source Files and Instance Main Methods (Fourth Preview) |
| 496 | Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism |
| 497 | Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm |
| 498 | Warn upon Use of Memory-Access Methods in sun.misc.Unsafe |
| 499 | Structured Concurrency (Fourth Preview) |
| 501 | Deprecate the 32-bit x86 Port for Removal |
Key Features
Class-File API Is Now Standard (JEP 484)
The Class-File API, previewed in JDK 22, finally becomes standard: an official API for reading, writing, and modifying .class files without depending on third-party libraries:
// Read the classes in a .class file
try (var stream = File.open("App.class")) {
ClassFile cf = ClassFile.of();
ClassModel cm = cf.parse(stream.readAllBytes());
System.out.println("Name: " + cm.name().string());
}
Stream Gatherers Is Now Standard (JEP 485)
Stream Gatherers permanently exit the preview phase and become a stable part of the library, offering grouping and sliding-window primitives:
Stream.of("alpha", "beta", "gamma")
.gather(Gatherers.windowSliding(2))
.map(w -> w.get(0) + " - " + w.get(1))
.toList();
Post-Quantum Cryptography: ML-KEM (JEP 496) and ML-DSA (JEP 497)
Java 24 adds cryptographic algorithms resistant to quantum computers, based on modular lattices (FIPS 203 / FIPS 204):
- ML-KEM (Key Encapsulation Mechanism) for secure key exchange:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ML-KEM-768");
KeyPair kp = kpg.generateKeyPair();
- ML-DSA (Digital Signature Algorithm) for post-quantum digital signatures.
Permanently Disable the Security Manager (JEP 486)
The legacy Security Manager, deprecated since JDK 17, is permanently disabled (its runtime support is removed).
Synchronize Virtual Threads without Pinning (JEP 491)
The pinning behavior that occurred when a virtual thread synchronized with a native lock is removed, improving the scaling of concurrent applications.
ZGC: Remove the Non-Generational Mode (JEP 490)
Generational ZGC becomes the only mode: the code for the old non-generational ZGC is removed.
Remove the Windows 32-bit x86 Port (JEP 479)
JDK 24 is the last release to support Windows 10 32-bit x86; the Windows 32-bit port is removed.
Compact Object Headers (JEP 450) — Experimental
Project Lilliput: reduces the size of object headers (down to 64/32 bits) to cut memory consumption.
Other Changes
- Generational Shenandoah (404): Experimental.
- Ahead-of-Time Class Loading & Linking (483).
- Key Derivation Function API (478): Preview.
- Scoped Values (487): Fourth preview.
- Primitive Types in Patterns (488): Second preview.
- Flexible Constructor Bodies (492): Third preview.
- Module Import Declarations (494): Second preview.
- Structured Concurrency (499): Fourth preview.
- Simple Source Files and Instance Main Methods (495): Fourth preview.
- Preparation to restrict the use of JNI (472).
- Late Barrier Expansion for G1 (475).
- Vector API (489): Ninth incubator.
- Warn upon Use of Memory-Access Methods in sun.misc.Unsafe (498).
- Deprecate the 32-bit x86 port for removal (501).
Conclusion
JDK 24 is a release dense with infrastructure and security changes: the Class-File API and Stream Gatherers become standard, post-quantum cryptography arrives with ML-KEM/ML-DSA, and the ecosystem is simplified by removing the Security Manager and the Windows 32-bit port. It is a version worth evaluating for anyone who wants to be ready for the upcoming LTS 25.