JDK 27 Early-Access Release Notes

Release Date: 2026/09/15

This is a draft of the release notes that will accompany JDK 27. The contents are subject to change until release.

Features

527: Post-Quantum Hybrid Key Exchange for TLS 1.3

Enhance the security of Java applications that require secure network communication by implementing hybrid key exchange algorithms for TLS 1.3. Such algorithms defend against future quantum computing attacks by combining a quantum-resistant algorithm with a traditional algorithm. Applications that use the javax.net.ssl APIs will benefit from these improved algorithms by default, without change to existing code.

Build 8

Predefined ISO-8601 Formatters Support Short Zone Offsets (JDK-8210336)

core-libs/java.time

Predefined ISO-8601 based formatters in the DateTimeFormatter class that accept zone offsets (for example, ISO_DATE) now support short zone offsets for parsing. In previous releases, parsing offsets without seconds or nanoseconds (for example, +01) resulted in a DateTimeParseException with some ISO formatters. These offsets are now parsed successfully by all predefined ISO formatters that accept zone offsets.

Build 7

TLS 1.3 KeyAgreement now Uses the Generic Key Algorithm (JDK-8328046)

security-libs/javax.net.ssl

TLS 1.3 KeyAgreement has been changed to use the Generic key algorithm for Diffie-Hellman shared secrets instead of the TlsPremasterSecret algorithm. This is an implementation detail that should be transparent to the users of the SunJSSE provider, but it may cause handshake failures when using JCE providers that do not support Generic keys.

Build 2

Removal of ThreadPoolExecutor.finalize() (JDK-8371748)

core-libs/java.util.concurrent

The finalize() method has been removed from java.util.concurrent.ThreadPoolExecutor.

ThreadPoolExecutor.finalize() was deprecated in JDK 9 as part of deprecating finalization for removal JEP 421. The method was re-specified in JDK 11 to "do nothing" and deprecated for removal in JDK 18.

The removal of this method means that any existing code that extends ThreadPoolExecutor and overrides finalize() to call super.finalize() (or calls finalize() directly) will now call Object.finalize(). This code may no longer compile as Object.finalize() throws Throwable whereas the removed ThreadPoolExecutor.finalize() did not declare any checked exceptions. Developers are strongly encouraged to stop using finalization but if necessary, the source compatibility issue can be worked around using a try-catch.

Removal of the java.locale.useOldISOCodes System Property (JDK-8355522)

core-libs/java.util:i18n

Support for the java.locale.useOldISOCodes system property in the java.util.Locale class has been removed. Originally introduced in JDK 17, this property allowed applications to revert to legacy ISO 639 language codes ("iw" for Hebrew, "ji" for Yiddish, and "in" for Indonesian). It was deprecated in JDK 25 and, starting with JDK 27, specifying this property has no effect and triggers a warning at runtime. Users who still rely on the old codes are encouraged to transition to the current standard codes: "he" for Hebrew, "yi" for Yiddish, and "id" for Indonesian.