java

JDK 21.0.9 Release Notes

Java™ SE Development Kit 21.0.9 (JDK 21.0.9)

October 21, 2025

The full version string for this update release is 21.0.9+7 (where "+" means "build"). The version number is 21.0.9. This JDK conforms to version 21 of the Java SE Specification (JSR 396 2023-09-19).

 

IANA TZ Data 2025b

For more information, refer to Timezone Data Versions in the JRE Software.

 

Security Baselines

The security baselines for the Java Runtime Environment (JRE) at the time of the release of JDK 21.0.9 are specified in the following table:

Java Family Version Security Baseline (Full Version String)
2121.0.9+7
1717.0.17+8
1111.0.29+8
81.8.0_471-b09

 

Keeping the JDK up to Date

Oracle recommends that the JDK is updated with each Critical Patch Update. In order to determine if a release is the latest, the Security Baseline page can be used to determine which is the latest version for each release family.

Critical patch updates, which contain security vulnerability fixes, are announced one year in advance on Critical Patch Updates, Security Alerts and Bulletins. It is not recommended that this JDK (version 21.0.9) be used after the next critical patch update scheduled for January 20, 2026.

Java Management Service, available to all users, can help you find vulnerable Java versions in your systems. Java SE Subscribers and customers running in Oracle Cloud can use Java Management Service to update Java Runtimes and to do further security reviews like identifying potentially vulnerable third party libraries used by your Java programs. Existing Java Management Service user click here to log in to your dashboard. The Java Management Service Documentation provides a list of features available to everyone and those available only to customers. Learn more about using Java Management Service to monitor and secure your Java Installations.

 

Availability of Oracle JDK 21 under NFTC

Oracle JDK 21 LTS, released in September 2023, has been permissively licensed under the free Java license and will continue to be so until one year after the subsequent LTS release. Oracle designated Oracle JDK 25, released in September of 2025, as a Long Term Support (LTS) release. Therefore, update releases of Oracle JDK 21 after September of 2026 will switch to the Java SE OTN license, the same license under which we offer updates to Java 8, 11, and 17. Users wishing to receive updates of the Oracle JDK under the free Java license should migrate to Oracle JDK 25.

 

New Features

security-libs/javax.net.ssl
 Mechanism to Disable Signature Schemes Based on Their TLS Scope (JDK-8349583)

TLS protocol specific usage constraints are now supported by the jdk.tls.disabledAlgorithms property in the java.security configuration file, as follows:

UsageConstraint:

    usage UsageType { UsageType }

UsageType:
    HandshakeSignature | CertificateSignature

HandshakeSignature restricts the use of an algorithm in TLS handshake signatures. CertificateSignature restricts the use of an algorithm in certificate signatures. An algorithm with this constraint cannot include other usage types defined in the jdk.certpath.disabledAlgorithms property. The usage type follows the keyword and more than one usage type can be specified with a whitespace delimiter.

security-libs/javax.net.ssl
 Mechanism to Disable TLS Cipher Suites by Pattern Matching (JDK-8341964)

TLS cipher suites can be disabled with the jdk.tls.disabledAlgorithms security property in the java.security configuration file using one or more * wildcard characters. For example, "TLS_RSA_*" disables all cipher suites that start with "TLS_RSA_". Only cipher suites starting with "TLS_" are allowed to have wildcard characters.

security-libs/javax.xml.crypto
 Update XML Security for Java to 3.0.5 (JDK-8344137)

The XML Signature implementation has been updated to Santuario 3.0.5. Support for four new SHA-3 based ECDSA SignatureMethod algorithms have been added: SignatureMethod.ECDSA_SHA3_224, SignatureMethod.ECDSA_SHA3_256, SignatureMethod.ECDSA_SHA3_384, and SignatureMethod.ECDSA_SHA3_512.

 

Known Issues

core-libs/java.net
 Datagram Packet Loss on macOS 26 and macOS 15.6 and Above (JDK-8368741)

When IPv6 is enabled, the JDK uses dual stack IPv4/IPv6 sockets by default. Binding, connecting, or sending datagrams uses IPv4-mapped IPv6 addresses in this case.

On some hosts running macOS version 15.6.x and above, and macOS 26, it has been observed that when a datagram socket bound to a IPv4 mapped IPv6 address sends a packet, either using the java.net.DatagramSocket or java.nio.channels.DatagramChannel APIs, then the first packet is lost and never gets delivered. A second invocation of send on the same socket, even to the same destination address, correctly delivers the packet and it is received by the recipient.

A bug has been filed with Apple (feedback issue id FB20302424) seeking their assistance. The issue is currently unresolved.

Until the issue is resolved, there are a couple of workarounds that applications can consider:

  • If using IPv4 is acceptable, then the java command can be launched with -Djava.net.preferIPv4Stack=true to use IPv4 sockets by default.
  • If using -Djava.net.preferIPv4Stack=true is not acceptable, a more local workaround can be applied by changing the application code to create a java.nio.channels.DatagramChannel with java.net.StandardProtocolFamily.INET as the protocol family and then bind the channel to a IPv4 address.

 

Removed Features and Options

security-libs/java.security
 Removed Four AffirmTrust Root Certificates (JDK-8361212)

The following root certificates, which are deactivated and no longer in use, have been removed from the cacerts keystore:

+ alias name "affirmtrustcommercialca [jdk]"

  Distinguished Name: CN=AffirmTrust Commercial, O=AffirmTrust, C=US

+ alias name "affirmtrustnetworkingca [jdk]"
  Distinguished Name: CN=AffirmTrust Networking, O=AffirmTrust, C=US

+ alias name "affirmtrustpremiumca [jdk]"
  Distinguished Name: CN=AffirmTrust Premium, O=AffirmTrust, C=US

+ alias name "affirmtrustpremiumeccca [jdk]"
  Distinguished Name: CN=AffirmTrust Premium ECC, O=AffirmTrust, C=US

 

Other Notes

install/install
 Use systemd Instead of init for jexec (JDK-8355072 (not public))

Linux RPM JDK installers now use systemd instead of init to manage the automatic jar file execution (jexec) service.

hotspot/runtime
 Print 'rss' and 'cache' As Part of the Container Information (JDK-8313083)

The HotSpot runtime code has been updated to additionally print a container's 'rss' and 'cache'. The additional output can be found in the JVM's response to a "jcmd [PID] VM.info" request and in the hs_err file generated in case of JVM abrupt termination.

This will help monitoring and troubleshooting OutOfMemory situations as OOM killer can terminate a process if its rss + cache usage reaches the max memory limit of the container.

security-libs/java.security
 SunMSCAPI Provider Opens the Windows Local Computer Key Store in Read-Only Mode in Non-Elevated Processes (JDK-8313367)

The Local Computer key store is accessed using the CERT_STORE_MAXIMUM_ALLOWED_FLAG. Since this store is typically managed by administrators for security reasons, processes are only given read-only access to specific private keys. By opening the store in read-only mode, non-elevated processes can now securely use these keys without requiring elevated permissions.

tools/launcher
 Disable "best-fit" Mapping on Windows Command Line (JDK-8337506)

Command line arguments to the Java launcher are no longer converted with Windows' "best-fit" mapping when the arguments include unmappable characters for the ANSI code page. This mapping has been intervening in the Java launcher's argument parsing. Unmappable characters are now replaced with the default replacement character, such as '?' in some cases. For rare cases, where applications need those unmappable characters on the command line, select UTF-8 in Windows Regional Settings.

xml/jaxp
 FEATURE_SECURE_PROCESSING for XPath (JDK-8356294 (not public))

The XPath processor prevents evaluation of external DTD references in raw XML documents if secure processing is enabled explicitly, such as follows:

XPathFactory xf = XPathFactory.newInstance();

xf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

This process will cause the XPath processor created via the factory to throw XPathExpressionException if used to evaluate a raw XML document that contains external references such as an external DTD.

Mitigation includes using External Access Properties to override that enabled by FSP. For example, the following setting will allow the process to continue when there is a reference to a file-based external DTD in the XML document:

xf.setProperty(ACCESS_EXTERNAL_DTD, "file");

It is recommended that applications use the XPath processor to evaluate DOM rather than raw XML documents.

security-libs/javax.net.ssl
 Improved Logging Behavior for javax.net.debug=ssl JSSE Debug Property (JDK-8350582)

The logging behavior of the TLS javax.net.debug system property has been improved in this release. The javax.net.debug property is used to generate TLS debug logs from the default JSSE provider. Previously, using the ssl option via -Djavax.net.debug=ssl produced very limited output, which reduced its usefulness for troubleshooting.

With this update, setting -Djavax.net.debug=ssl now enables comprehensive SSL debug logging, except for the data, packet, and plaintext sub-options. Applications using this option will now see significantly more detailed debug information in logs.

 

Bug Fixes

This release also contains fixes for security vulnerabilities described in the Oracle Critical Patch Update.

Issues fixed in 21.0.8:
# JBS Component/Subcomponent Summary
1JDK-8355528client-libs/2dUpdate HarfBuzz to 11.2.0
2JDK-8358452client-libs/java.awtJNI exception pending in Java_sun_awt_screencast_ScreencastHelper_remoteDesktopKeyImpl of screencast_pipewire.c:1214 (ID: 51119)
3JDK-8360647client-libs/java.awt[XWayland] [OL10] NumPad keys are not triggered
4JDK-8351907client-libs/java.awt[XWayland] [OL10] Robot.mousePress() is delivered to wrong place
5JDK-8185429client-libs/java.awt[macos] After a modal dialog is closed, no window becomes active
6JDK-8341311client-libs/javax.accessibility[Accessibility,macOS,VoiceOver] VoiceOver announces incorrect number of items in submenu of JPopupMenu
7JDK-8365375client-libs/javax.swingMethod SU3.setAcceleratorSelectionForeground assigns to acceleratorForeground
8JDK-8348760client-libs/javax.swingRadioButton is not shown if JRadioButtonMenuItem is rendered with ImageIcon in WindowsLookAndFeel
9JDK-8322512core-libs/java.langStringBuffer.repeat does not work correctly after toString() was called
10JDK-8319174core-libs/java.mathEnhance robustness of some j.m.BigInteger constructors
11JDK-8358764core-libs/java.nio(sc) SocketChannel.close when thread blocked in read causes connection to be reset (win)
12JDK-8314611core-libs/java.util:i18nProvide more explicative error message parsing Currencies
13JDK-8343804core-libs/java.util:i18nShow the default time zone with -XshowSettings option
14JDK-8353713core-libs/java.util:i18nImprove Currency.getInstance exception handling
15JDK-8368308core-libs/java.util:i18nISO 4217 Amendment 180 Update - Bulgaria Adopts the Euro in 2026
16JDK-8226919core-svc/toolsattach in linux hangs due to permission denied accessing /proc/pid/root
17JDK-8347564hotspot/gcZGC: Crash in DependencyContext::clean_unloading_dependents
18JDK-8364258hotspot/jfrThreadGroup constant pool serialization is not normalized
19JDK-8332506hotspot/runtimeSIGFPE In ObjectSynchronizer::is_async_deflation_needed()
20JDK-8350201hotspot/runtimeOut of bounds access on Linux aarch64 in os::print_register_info
21JDK-8348402hotspot/runtimePerfDataManager stalls shutdown for 1ms
22JDK-8347129hotspot/runtimecpuset cgroups controller is required for no good reason
23JDK-8338154hotspot/testFix -Wzero-as-null-pointer-constant warnings in gtest framework
24JDK-8315042security-libs/java.securityNPE in PKCS7.parseOldSignedData
25JDK-8350830security-libs/java.securityValues converted incorrectly when reading TLS session tickets
26JDK-8350582security-libs/javax.net.sslCorrect the parsing of the ssl value in javax.net.debug
27JDK-8355779security-libs/javax.net.sslWhen no "signature_algorithms_cert" extension is present we do not apply certificate scope constraints to algorithms in "signature_algorithms" extension
28JDK-8350807security-libs/javax.net.sslCertificates using MD5 algorithm that are disabled by default are incorrectly allowed in TLSv1.3 when re-enabled
29JDK-8332106tools/javacVerifyError when using switch pattern in this(...) or super(...)