JDK 26 Arrives March 17 with HTTP/3 Support, GC-Agnostic AOT Caching, and the End of the Applet API
Java 26 ships 10 JEPs including HTTP/3, ahead-of-time caching for all garbage collectors, G1 throughput gains, and the final removal of the Applet API after a five-year deprecation.
Overview
JDK 26, the first non-LTS release following last September’s JDK 25, is scheduled to reach general availability on March 17, 2026. The release carries 10 JDK Enhancement Proposals spanning performance, networking, security, and language evolution, though none of its five preview or incubator features graduate to standard status in this cycle.
The feature set was frozen in early December 2025, and the platform has been in release-candidate phase since February.
What We Know
HTTP/3 Comes to the Standard Library
JEP 517 adds HTTP/3 support to Java’s built-in HTTP Client API. The new protocol, built on the IETF QUIC transport layer, is available through an opt-in HttpClient.Version.HTTP_3 setting. HTTP/2 remains the default, so existing applications are unaffected unless developers explicitly select the newer protocol.
Ahead-of-Time Caching Works with Any Garbage Collector
JEP 516 extends the ahead-of-time class loading and object caching introduced in JDK 24 to work with every garbage collector, including the low-latency Z Garbage Collector. Previously, cached objects were stored in a GC-specific format, forcing developers to choose between fast startup and low-latency garbage collection. The new GC-agnostic format eliminates that trade-off, advancing the goals of Project Leyden.
G1 Garbage Collector Gets a Throughput Boost
JEP 522 reduces the synchronization overhead between application threads and G1 GC threads by modifying the write barrier to eliminate card table synchronization. The change improves both throughput and latency without altering G1’s architecture or requiring any user-facing configuration changes.
Final Fields Begin Their Path to True Immutability
JEP 500 introduces runtime warnings when code uses deep reflection to mutate a final field. The new --illegal-final-field-mutation JVM option supports four modes: allow, warn (now the default), debug, and deny. A future release is expected to change the default to deny, making final truly mean final and strengthening Java’s integrity-by-default guarantees.
The Applet API Is Gone
JEP 504 removes the Applet API, which was deprecated for removal in JDK 17 back in 2021. No modern JDK release or web browser has supported applets for years, and the removal cleans up a legacy surface that had lingered in the platform since its earliest days.
Standard Library Additions
Beyond the headline JEPs, JDK 26 adds several smaller but notable API enhancements: UUIDv7 support via a new UUID.ofEpochMillis() method for sortable, timestamp-based identifiers; Process now implements AutoCloseable; new string case-folding methods; BigInteger nth root operations; and saturating arithmetic on Instant.
Preview and Incubator Features Continue
Five features remain in preview or incubator status. Structured Concurrency (JEP 525) enters its sixth preview with a new onTimeout() method for the StructuredTaskScope.Joiner interface. Primitive Types in Patterns (JEP 530) reaches its fourth preview with tighter dominance checks. Lazy Constants (JEP 526) and PEM Encodings of Cryptographic Objects (JEP 524) each return for a second preview, with the latter renaming PEMRecord to PEM and adding encryption support for KeyPair. The Vector API (JEP 529) enters its eleventh incubation cycle, still waiting on Project Valhalla’s value types before it can advance to preview.
What We Don’t Know
Oracle has not indicated which, if any, of the long-running preview features will finalize in the next release. Structured Concurrency has been in preview since JDK 21, and the Vector API has been incubating since JDK 16 in March 2021. Both depend in part on Project Valhalla, whose timeline remains unclear. JDK 27, scheduled for September 2026, currently lists only one targeted JEP: post-quantum hybrid key exchange for TLS 1.3.
Analysis
JDK 26 is a maintenance-tempo release. Its strongest contributions are infrastructural: making AOT caching portable across garbage collectors, reducing G1 synchronization overhead, and beginning to close the door on final-field mutation. These are the kinds of incremental improvements that accumulate into meaningful platform gains over multiple release cycles.
The continued preview status of Structured Concurrency and the Vector API underscores Java’s conservative approach to standardization. Both features have been refined across many iterations rather than being rushed to finalization. For the millions of developers on the platform, that patience is a feature, not a bug.