Oracle has released version 24 of the Java programming language and virtual machine. As the third non-LTS release since JDK 21 and the fifteenth since the beginning of the six-month cadence, the 24 JEPs in this final feature set are:
Two of these – Generational Shenandoah (Experimental) and Compact Object Headers (Experimental) – are new experimental features. Also, nearly half of these features are final, some of which have gone through the incubation and preview processes.
As shown in the graph below, as presented in this blog post, the feature cadence for JDK 24 is nearly twice than the average number of previous releases dating back to JDK 10.
We examine some of these JEPs, discuss the JDK 24 Launch Event, and update our predictions for features that may be included in JDK 25.
Generational Shenandoah (Experimental)
JEP 404, Generational Shenandoah (Experimental), proposes to provide an experimental generational mode, without breaking non-generational Shenandoah Garbage Collector, with the intent to make the generational mode the default in a future JDK release. Originally targeted for JDK 21, JEP 404 was officially removed from the final feature set due to the “risks identified during the review process and the lack of time available to perform the thorough review that such a large contribution of code requires.” At the time, the Shenandoah team decided to target a future JDK release to “deliver the best Generational Shenandoah that they can.”
Compact Object Headers (Experimental)
JEP 450, Compact Object Headers (Experimental), inspired by Project Lilliput, proposes to “reduce the size of object headers in the HotSpot JVM from between 96 and 128 bits down to 64 bits on 64-bit architectures.” This feature is disabled by default as it is considered experimental and may cause unintended consequences if enabled by a developer. More details on compact object headers may be found in this InfoQ news story.
Stream Gatherers
JEP 485, Stream Gatherers, finalizes this feature after two rounds of preview, namely: JEP 473: Stream Gatherers (Second Preview), delivered in JDK 23; and JEP 461, Stream Gatherers (Preview), delivered in JDK 22. This feature was designed to enhance the Stream API to support custom intermediate operations that will “allow stream pipelines to transform data in ways that are not easily achievable with the existing built-in intermediate operations.” More details on stream gatherers may be found in the original design document and this InfoQ news story.
Ahead-of-Time Class Loading & Linking
JEP 483, Ahead-of-Time Class Loading & Linking, proposes to “improve startup time by making the classes of an application instantly available, in a loaded and linked state, when the HotSpot Java Virtual Machine starts.” This may be achieved by monitoring the application during one run and storing the loaded and linked forms of all classes in a cache for use in subsequent runs. This feature will lay a foundation for future improvements to both startup and warmup time. More details may be found in this InfoQ news story.
Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
JEP 497, Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm, proposes to “enhance the security of Java applications by providing an implementation of the quantum-resistant Module-Lattice-Based Digital Signature Algorithm (ML-DSA)” as standardized by FIPS 204. This will be accomplished by implementing the Java KeyPairGenerator
, Signature
and KeyFactory
classes.
Vector API (Ninth Incubator)
JEP 489, Vector API (Ninth Incubator), proposes to incorporate enhancements in response to feedback from the previous eight rounds of incubation. This feature introduces an API to “express vector computations that reliably compile at runtime to optimal vector instructions on supported CPU architectures, thus achieving performance superior to equivalent scalar computations.” JEP 338, Vector API (Incubator), was delivered as an incubator module in JDK 16. Originally slated to be a re-incubation for JDK 24 by reusing the original Incubator status, it was decided to keep enumerating. The Vector API will continue to incubate until the necessary features of Project Valhalla become available as preview features. At that time, the team will adapt the Vector API and its implementation to use them, and will elevate the Vector API from Incubation to Preview.
JDK 24 Launch Event
The JDK 24 Launch Event, live-streamed on March 18, 2025, featured: a Java 24 overview with Mikael Vidstedt, Senior Director, Java Virtual Machine at Oracle; the opening keynote, Our World, Moved by Java, facilitated by Chad Arimura, Vice President, Java Developer Relations at Oracle; and a JDK 24 Deep Dive with Viktor Klang, Software Architect at Oracle and Dan Heidinga, Software Architect at Oracle, who presented on Stream Gatherers and AOT Caching, respectively. InfoQ will follow up with details on the opening address.
JDK 25
Scheduled for a GA release in September 2025, two JEPs have been targeted for JDK 25 at this time. However, based on a number of JEP candidates and drafts, especially those that have been submitted, we can surmise which additional JEPs have the potential to be included in JDK 24.
JEP 502, Stable Values (Preview), has been targeted for JDK 25. Formerly known as Computed Constants (Preview), this JEP introduces the concept of computed constants, defined as immutable value holders that are initialized at most once. This offers the performance and safety benefits of final
fields, while offering greater flexibility as to the timing of initialization.
JEP 503, Remove the 32-bit x86 Port, has been targeted for JDK 25. This JEP proposes to “remove the source code and build support for the 32-bit x86 port.” This feature is a follow-up from JEP 501, Deprecate the 32-bit x86 Port for Removal, to be delivered in the upcoming release of JDK 24. The review is expected to conclude on March 18, 2025.
JEP Draft 8340343, Structured Concurrency (Fifth Preview), proposes a fifth preview, with several API changes, to gain more feedback from the previous four rounds of preview, namely: JEP 499, Structured Concurrency (Fourth Preview), to be delivered in the upcoming GA release of JDK 24; JEP 480, Structured Concurrency (Third Preview), delivered in JDK 23; JEP 462, Structured Concurrency (Second Preview), delivered in JDK 22; and JEP 453, Structured Concurrency (Preview), delivered in JDK 21. This feature simplifies concurrent programming by introducing structured concurrency to “treat groups of related tasks running in different threads as a single unit of work, thereby streamlining error handling and cancellation, improving reliability, and enhancing observability.” One of the proposed API changes involves the StructuredTaskScope
interface to be opened via static factory methods rather than public constructors.
JEP Draft 8345525, Remove the Terminally Deprecated Applet API, proposes to finally remove the Applet API which has been deprecated since JDK 9 via JEP 289, Deprecate the Applet API followed by JEP 398, Deprecate the Applet API for Removal, delivered in JDK 17.
The formal release date for JDK 25 is expected to be September 2025, soon to be proposed by Mark Reinhold, Chief Architect, Java Platform Group at Oracle. Developers can anticipate a feature freeze in early-June 2025. More details on additional JEP drafts and candidates may be found in this more detailed InfoQ news story.
JDK 24 may now be downloaded from Oracle with binaries from other vendors expected to become available in the coming days.