RELEASE NOTES: JDK 21.0.11

Notes generated: Tue Mar 03 07:27:05 CET 2026

JEPs

None.

RELEASE NOTES

security-libs/javax.net.ssl

Issue Description
JDK-8328608

Configurable New Session Tickets Count for TLSv1.3


A new system property, jdk.tls.server.newSessionTicketCount, sets the number of TLSv1.3 resumption tickets sent by a JSSE server per session. It can be set on the command line with -Djdk.tls.server.newSessionTicketCount=#, where # ranges from 0 to 10. The default is 1.

For more details, see Customizing JSSE.


JDK-8369282

Distrust TLS Server Certificates Anchored by Chunghwa Root Certificates and Issued After March 17, 2026


The JDK will stop trusting TLS server certificates issued after March 17, 2026 and anchored by Chunghwa root certificates, in line with similar plans announced by Google and Mozilla.

TLS server certificates issued on or before March 17, 2026 will continue to be trusted until they expire. Certificates issued after that date, and anchored by the Certificate Authority listed in the table below, will be rejected.

The restrictions are enforced in the JDK implementation (the SunJSSE Provider) of the Java Secure Socket Extension (JSSE) API. A TLS session will not be negotiated if the server's certificate chain is anchored by any of the Certificate Authorities in the table below and the certificate has been issued after March 17, 2026.

An application will receive an exception with a message indicating the trust anchor is not trusted, for example:

` "TLS Server certificate issued after 2026-03-17 and anchored by a distrusted legacy Chunghwa root CA: OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd." C=TW" `

The JDK can be configured to trust these certificates again by removing "CHUNGHWA_TLS" from the jdk.security.caDistrustPolicies security property in the java.security configuration file.

The restrictions are imposed on the following Chunghwa Root certificates included in the JDK:

Root Certificates distrusted after 2026-03-17
Distinguished Name SHA-256 Fingerprint
OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd.", C=TW

C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5

You can also use the keytool utility from the JDK to print out details of the certificate chain, as follows:

keytool -v -list -alias <your_server_alias> -keystore <your_keystore_filename>

If any of the certificates in the chain are issued by one of the root CAs in the table above are listed in the output you will need to update the certificate or contact the organization that manages the server.


hotspot/jfr

Issue Description
JDK-8365972

JFR: ThreadDump and ClassLoaderStatistics events may cause back to back rotations


The jdk.ThreadDump event is currently written when a chunk begins and ends (everyChunk), but when it is written at the beginning, it may trigger another rotation within 1 second. This can cause other relevant data to be flushed out very quickly, e.g. 15 seconds if using the default max size of 250 MB.

Reproducer:

$ java Reproducer 1400 300 20

import java.util.concurrent.Semaphore; import jdk.jfr.Configuration; import jdk.jfr.Recording;

public class Reproducer { public static void main(String[] args) throws Exception { int threadCount = Integer.parseInt(args[0]); int stackDepth = Integer.parseInt(args[1]); int sleepTime = Integer.parseInt(args[2]); Semaphore semaphore = new Semaphore(0); for (int i = 0; i < threadCount; i++) { Thread t = new Thread(() -> stack(stackDepth, semaphore)); t.setDaemon(true); t.start(); } semaphore.acquire(threadCount); Configuration c = Configuration.getConfiguration("default"); try (Recording r = new Recording(c)) { r.start(); Thread.sleep(sleepTime * 1000); } }

static void stack(int depth, Semaphore semaphore) {
    if (depth > 0) {
        stack(depth - 1, semaphore);
    }
    if (depth == 0) {
        semaphore.release();
        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException ignored) {}
    }
}

}

Short-term, we could change the implementation so that jdk.ThreadDump and jdk.ClassLoaderStatistics are only emitted when a recording starts and a chunk ends. Such a change may be suitable for backporting.

Longer-term, we might want to address this in a more generic way so that it cannot occur with other events as well, including user-defined ones. Three alternatives:

1) Redefine "everyChunk" so that it only emits when a recording starts and when a chunk ends. 2) Create a new keyword, e.g. "rotation", with the same semantics as option 1, but keep "everyChunk" as is. 3) Broaden the setting so it can accept a combination of recording- or chunk-specific settings.

Regardless of approach, the new semantics must support cases where two recordings are in use at the same time with different settings.


Reduced frequency of JFR events jdk.ThreadDump and jdk.ClassLoaderStatistics


In applications with many threads (typically more than 1,000) and deep Java stacks (typically more than 300 frames), the jdk.ThreadDump event can become large enough to trigger a recording file rotation by itself. This can cause other events to be removed earlier than expected by the retention policy. A similar issue occurs for the jdk.ClassLoaderStatistics event in applications that use several hundred thousand class loaders.

To avoid back-to-back rotations in the default configuration (default.jfc), the jdk.ThreadDump and jdk.ClassLoaderStatistics events are now written only when a recording starts and at the end of a file rotation. They are no longer written at the beginning of a new file created by rotation.


security-libs/java.security

Issue Description
JDK-8244336

New Security Property jdk.crypto.disabledAlgorithms for Restricting Algorithms at the JCE layer


A new security property named jdk.crypto.disabledAlgorithms has been introduced to disable algorithms for JCE/JCA cryptographic services. Initially, this property only supports the Cipher, KeyStore, MessageDigest, and Signature services. This property is defined in the java.security file and initially no algorithms are disabled by default. However, this may change in the future. This security property can be overridden by a system property of the same name if applications need to re-enable algorithms.

See Disabled and Restricted Cryptographic Algorithms for more information.


JDK-8354469

Enhanced keytool Password Handling When Output Is Redirected


The [keytool] command reads passwords from the system console to prevent them from being displayed on the screen. However, the console is usually available only when both the standard input and output streams are not redirected. Previously, if the standard output stream was redirected into a file or another command, the console was unavailable and the input password was echoed on the screen. This enhancement improves password handling to ensure that the password is not displayed on the screen even if the standard output stream is redirected. This enhancement has also been made to the [jarsigner] command and the JAAS [TextCallbackHandler] API.


FIXED ISSUES

client-libs

Priority Bug Summary
P4 JDK-8376270 [21u, 17u] Redo JDK-8361748: Enforce limits on the size of an XBM image

client-libs/2d

Priority Bug Summary
P3 JDK-8373727 New XBM images parser regression: only the first line of the bitmap array is parsed
P3 JDK-8375057 Update HarfBuzz to 12.3.2
P4 JDK-8363950 Incorrect jtreg header in TestLayoutVsICU.java
P4 JDK-8368882 NPE during text drawing on machine with JP locale
P4 JDK-8369911 Test sun/java2d/marlin/ClipShapeTest.java#CubicDoDash, #Cubic and #Poly fail intermittent

client-libs/java.awt

Priority Bug Summary
P3 JDK-6899304 java.awt.Toolkit.getScreenInsets(GraphicsConfiguration) returns incorrect values
P3 JDK-8372756 Mouse additional buttons and horizontal scrolling are broken on XWayland GNOME >= 47 after JDK-8351907
P3 JDK-8372977 Unnecessary gthread-2.0 loading
P3 JDK-8375063 Update Libpng to 1.6.54
P3 JDK-8377526 Update Libpng to 1.6.55
P4 JDK-8376251 [macos] java/awt/Frame/I18NTitle.java fails on MacOS (JDK-8355884)
P4 JDK-8349351 Combine Screen Inset Tests into a Single File
P4 JDK-8256289 java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java failed with "RuntimeException: Wrong focus owner: java.awt.Button[button1,41,36,56x23,label=Button1]"
P4 JDK-8372048 Performance improvement on Linux remote desktop
P4 JDK-8339791 Refactor MiscUndecorated/ActiveAWTWindowTest.java
P4 JDK-8361067 Test ExtraButtonDrag.java requires frame.dispose in finally block

client-libs/javax.swing

Priority Bug Summary
P3 JDK-8298153 Colored text is not shown on disabled checkbox and radio button with GTK LAF for bug4314194
P3 JDK-8316274 javax/swing/ButtonGroup/TestButtonGroupFocusTraversal.java fails in Ubuntu 23.10 with Motif LAF
P3 JDK-8075917 The regression-swing case failed as the text on label is not painted red with the GTK L&F
P4 JDK-8353755 Add a helper method to Util - findComponent()
P4 JDK-8354219 Automate javax/swing/JComboBox/ComboPopupBug.java
P4 JDK-8347475 GTK: javax/swing/JColorChooser/Test8152419.java there are no swatches or RGB tab in JColorChooser
P4 JDK-8361530 Test javax/swing/GraphicsConfigNotifier/StalePreferredSize.java timed out

core-libs/java.io

Priority Bug Summary
P4 JDK-8366261 Provide utility methods for sun.security.util.Password

core-libs/java.lang

Priority Bug Summary
P3 JDK-8355632 WhiteBox.waitForReferenceProcessing() fails assert for return type
P4 JDK-8356107 [java.lang] Use @requires tag instead of exiting based on os.name or separatorChar property
P4 JDK-8351000 StringBuilder getChar and putChar robustness
P4 JDK-8361613 System.console() should only be available for interactive terminal
P4 JDK-8372710 Update ProcessBuilder/Basic regex

core-libs/java.lang:reflect

Priority Bug Summary
P3 JDK-8343377 Performance regression in reflective invocation of native methods

core-libs/java.net

Priority Bug Summary
P4 JDK-8317801 java/net/Socket/asyncClose/Race.java fails intermittently (aix)

core-libs/java.nio

Priority Bug Summary
P4 JDK-8351458 (ch) Move preClose to UnixDispatcher
P4 JDK-8114830 (fs) Files.copy fails due to interference from something else changing the file system
P4 JDK-8314810 (fs) java/nio/file/Files/CopyInterference.java should use TestUtil::supportsLinks
P4 JDK-8326897 (fs) The utility TestUtil.supportsLinks is wrongly used to check for hard link support
P4 JDK-8355445 [java.nio] Use @requires tag instead of exiting based on "os.name" property value
P4 JDK-8317838 java/nio/channels/Channels/SocketChannelStreams.java running into timeout (aix)
P4 JDK-8364764 java/nio/channels/vthread/BlockingChannelOps.java subtests timed out
P4 JDK-8366128 jdk/jdk/nio/zipfs/TestPosix.java::testJarFile uses wrong file

core-libs/java.rmi

Priority Bug Summary
P4 JDK-8372857 Improve debuggability of java/rmi/server/RemoteServer/AddrInUse.java test
P4 JDK-8366866 SslRMIClientSocketFactory#createSocket lacking priviledges (securitymanger)

core-libs/java.text

Priority Bug Summary
P4 JDK-8317633 Modernize text.testlib.HexDumpReader

core-libs/java.time

Priority Bug Summary
P3 JDK-8373476 (tz) Update Timezone Data to 2025c
P3 JDK-8345668 ZoneOffset.ofTotalSeconds performance regression

core-libs/java.util

Priority Bug Summary
P3 JDK-8301875 java.util.TimeZone.getSystemTimeZoneID uses C library default file mode

core-libs/javax.naming

Priority Bug Summary
P4 JDK-8287062 com/sun/jndi/ldap/LdapPoolTimeoutTest.java failed due to different timeout message
P4 JDK-8355278 Improve debuggability of com/sun/jndi/ldap/LdapPoolTimeoutTest.java test

core-svc

Priority Bug Summary
P4 JDK-8342449 reimplement: JDK-8327114 Attach in Linux may have wrong behavior when pid == ns_pid
P4 JDK-8358077 sun.tools.attach.VirtualMachineImpl::checkCatchesAndSendQuitTo on Linux leaks file handles after JDK-8327114

core-svc/debugger

Priority Bug Summary
P4 JDK-8370636 com/sun/jdi/TwoThreadsTest.java should wait for completion of all threads
P4 JDK-8366850 Test com/sun/jdi/JdbStopInNotificationThreadTest.java failed
P4 JDK-8366694 Test JdbStopInNotificationThreadTest.java timed out after 60 second

core-svc/java.lang.management

Priority Bug Summary
P4 JDK-8030957 AIX: Implement OperatingSystemMXBean.getSystemCpuLoad() and .getProcessCpuLoad() on AIX

core-svc/tools

Priority Bug Summary
P3 JDK-8341246 Test com/sun/tools/attach/PermissionTest.java fails access denied after JDK-8327114
P4 JDK-8327114 Attach in Linux may have wrong behaviour when pid == ns_pid (Kubernetes debug container)
P4 JDK-8341310 Test TestJcmdWithSideCar.java should skip ACCESS_TMP_VIA_PROC_ROOT (after JDK-8327114)

hotspot/compiler

Priority Bug Summary
P2 JDK-8358751 C2: Recursive inlining check for compiled lambda forms is broken
P3 JDK-8373525 C2: assert(_base == Long) failed: Not a Long
P4 JDK-8368787 Error reporting: hs_err files should show instructions when referencing code in nmethods
P4 JDK-8357380 java/lang/StringBuilder/RacingSBThreads.java times out with C1
P4 JDK-8337102 JITTester: Fix breaks in static initialization blocks
P4 JDK-8371608 Jtreg test jdk/internal/vm/Continuation/Fuzz.java sometimes fails with (fast)debug binaries
P4 JDK-8370579 PPC: fix inswri immediate argument order
P4 JDK-8330016 Stress seed should be initialized for runtime stub compilation
P4 JDK-8367135 Test compiler/loopstripmining/CheckLoopStripMining.java needs internal timeouts adjusted

hotspot/gc

Priority Bug Summary
P4 JDK-8372348 Adjust some UL / JFR string deduplication output messages
P4 JDK-8370325 G1: Disallow GC for TLAB allocation
P4 JDK-8354145 G1: UseCompressedOops boundary is calculated on maximum heap region size instead of maxiumum ergonomic heap region size
P4 JDK-8354559 gc/g1/TestAllocationFailure.java doesn't need WB API
P4 JDK-8342175 MemoryEaterMT fails intermittently with ExceptionInInitializerError
P4 JDK-8333386 TestAbortOnVMOperationTimeout test fails for client VM
P4 JDK-8354922 ZGC: Use MAP_FIXED_NOREPLACE when reserving memory

hotspot/jfr

Priority Bug Summary
P3 JDK-8371889 [21u] JFR: Deadlock in ThrowableTracer
P3 JDK-8365972 JFR: ThreadDump and ClassLoaderStatistics events may cause back to back rotations
P3 JDK-8372321 TestBackToBackSensitive fails intermittently after JDK-8365972
P4 JDK-8372441 JFR: Improve logging of TestBackToBackSensitive

hotspot/jvmti

Priority Bug Summary
P3 JDK-8371103 vmTestbase/nsk/jvmti/scenarios/events/EM02/em02t006/TestDescription.java failing

hotspot/runtime

Priority Bug Summary
P2 JDK-8366938 Test runtime/handshake/HandshakeTimeoutTest.java crashed
P3 JDK-8335906 [s390x] Test Failure: GTestWrapper.java
P3 JDK-8365526 Crash with null Symbol passed to SystemDictionary::resolve_or_null
P3 JDK-8354878 File Leak in CgroupSubsystemFactory::determine_type of cgroupSubsystem_linux.cpp:300
P3 JDK-8375530 PPC64: incorrect quick verify_method_data_pointer check causes poor performance in debug build
P3 JDK-8372988 Test runtime/Nestmates/membership/TestNestHostErrorWithMultiThread.java failed: Unexpected interrupt
P4 JDK-8313319 [linux] mmap should use MAP_FIXED_NOREPLACE if available
P4 JDK-8370572 Cgroups hierarchical memory limit is not honored after JDK-8322420
P4 JDK-8370966 Create regression test for the hierarchical memory limit fix in JDK-8370572
P4 JDK-8374178 Missing include in systemDictionary.cpp after JDK-8365526
P4 JDK-8354057 Odd debug output in -Xlog:os+container=debug on certain systems
P4 JDK-8334738 os::print_hex_dump should optionally print ASCII
P4 JDK-8374056 RISC-V: Fix argument passing for the RiscvFlushIcache::flush
P4 JDK-8362834 Several runtime/Thread tests should mark as /native
P4 JDK-8350103 Test containers/systemd/SystemdMemoryAwarenessTest.java fails on Linux ppc64le SLES15 SP6
P4 JDK-8359827 Test runtime/Thread/ThreadCountLimit.java need loop increasing the limit
P4 JDK-8318302 ThreadCountLimit.java failed with "Native memory allocation (mprotect) failed to protect 16384 bytes for memory to guard stack pages"

hotspot/test

Priority Bug Summary
P4 JDK-8346048 test/lib/containers/docker/DockerRunOptions.java uses addJavaOpts() from ctor

infrastructure

Priority Bug Summary
P4 JDK-8372464 Bump update version for OpenJDK: jdk-21.0.11

infrastructure/build

Priority Bug Summary
P3 JDK-8374642 EscapeHash macro fails with GNU make 4.3 and 4.4
P3 JDK-8331431 Update to use jtreg 7.4
P3 JDK-8339238 Update to use jtreg 7.5.1
P3 JDK-8357141 Update to use jtreg 7.5.2
P4 JDK-8378218 MSYS2 reports cygwin triplet causing bash configure failure

infrastructure/licensing

Priority Bug Summary
P4 JDK-8377905 gcc.md included with every build

security-libs/java.security

Priority Bug Summary
P2 JDK-8375549 ConcurrentModificationException if jdk.crypto.disabledAlgorithms has multiple entries with known oid
P3 JDK-8354469 Keytool exposes the password in plain text when command is piped using | grep
P3 JDK-8374555 No need for visible input warning in s.s.u.Password when not reading from System.in
P3 JDK-8244336 Restrict algorithms at JCE layer
P4 JDK-8378853 [25u] Make backport of JDK-8244336 comply with differences in CSR
P4 JDK-8346962 Test CRLReadTimeout.java fails with -Xcomp on a fastdebug build

security-libs/javax.crypto

Priority Bug Summary
P4 JDK-8358159 Empty mode/padding in cipher transformations
P4 JDK-8359388 Stricter checking for cipher transformations

security-libs/javax.net.ssl

Priority Bug Summary
P2 JDK-8328608 Multiple NewSessionTicket support for TLS
P3 JDK-8369282 Distrust TLS server certificates anchored by Chunghwa ePKI Root CA
P3 JDK-8371559 Intermittent timeouts in test javax/net/ssl/Stapling/HttpsUrlConnClient.java
P3 JDK-8334670 SSLSocketOutputRecord buffer miscalculation
P4 JDK-8360539 DTLS handshakes fails due to improper cookie validation logic
P4 JDK-8348309 MultiNST tests need more debugging and timing
P4 JDK-8333857 Test sun/security/ssl/SSLSessionImpl/ResumeChecksServer.java failed: Existing session was used
P4 JDK-8366817 test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcServer.java and JdkProcClient.java should not delete logs
P4 JDK-8357277 Update OpenSSL library for interop tests

security-libs/javax.security

Priority Bug Summary
P2 JDK-8367583 sun/security/util/AlgorithmConstraints/InvalidCryptoDisabledAlgos.java fails after JDK-8244336

security-libs/org.ietf.jgss:krb5

Priority Bug Summary
P3 JDK-8345578 New test in JDK-8343622 fails with a promoted build
P4 JDK-8343622 AesDkCrypto.stringToKey should not return null

tools/jar

Priority Bug Summary
P4 JDK-8371978 tools/jar/ReproducibleJar.java fails on XFS

tools/jshell

Priority Bug Summary
P4 JDK-8351639 Improve debuggability of test/langtools/jdk/jshell/JdiHangingListenExecutionControlTest.java test

xml/jaxp

Priority Bug Summary
P4 JDK-8336695 Update Commons BCEL to Version 6.10.0