java

JDK 26.0.2 Release Notes

Java™ SE Development Kit 26, Update 26.0.2 (JDK 26.0.2)

July 21, 2026

The full version string for this update release is 26.0.2+10 (where "+" means "build"). The version number is 26.0.2. This JDK conforms to version 26 of the Java SE Specification (JSR 401 2026-03-17).

 

IANA TZ Data 2026b

JDK 26.0.2 contains IANA time zone data 2026b which contains the following changes:

  • British Columbia last daylight saving time change was 2026-03-08 spring forward.

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 26.0.2 are specified in the following table:

Java Family Version Security Baseline (Full Version String)
2626.0.2+10
2525.0.4+7
2121.0.12+7
1717.0.20+7
1111.0.32+7
81.8.0_501-b08

 

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.

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 26.0.2) be used after the next Critical Security Patch Update scheduled for August 18, 2026. Oracle is transitioning to more frequent security updates, see the recently published blog for more information.

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.

 

New Features

security-libs/java.security
 Add Support for the Latest ML-KEM and ML-DSA Private Key Encodings (JDK-8347938)

The JDK now encodes ML-KEM and ML-DSA private keys in PKCS #8 format using the DER-encoded ASN.1 CHOICE formats defined in Section 6, "Private Key Format" of RFC 9935 and Section 6, "Private Key Format" of RFC 9881. Two new security properties, jdk.mlkem.pkcs8.encoding and jdk.mldsa.pkcs8.encoding, control the encoding used when generating new keys with a KeyPairGenerator or when translating keys with a KeyFactory. Valid values are seed, expandedKey, and both (case-insensitive). If a system property of the same name is also specified, it supersedes the security property value. All three formats are supported when decoding previously encoded private keys with a KeyFactory.

When these algorithms were introduced in JDK 24, the encoding format was equivalent to the expandedKey value. This release changes the default value to seed. As a result, ML-KEM and ML-DSA private keys generated by this JDK release will not be accepted by older releases by default, although keys generated by older releases are still readable by this release. To enable older JDK releases to accept ML-KEM and ML-DSA private keys generated by this JDK release, set the jdk.mlkem.pkcs8.encoding or jdk.mldsa.pkcs8.encoding property (whichever property is relevant to your use case) to expandedKey, and use KeyFactory.translateKey to convert the key to the older format.

 

Other Notes

security-libs/java.security
 Added WISeKey Global GB and GC Root CA Certificates (JDK-8372351)

The following root certificates have been added to the cacerts truststore:

+ WISeKey

  + wisekeyglobalrootgbca
    DN: CN=OISTE WISeKey Global Root GB CA, OU=OISTE Foundation Endorsed, O=WISeKey, C=CH

+ WISeKey
  + wisekeyglobalrootgcca
    DN: CN=OISTE WISeKey Global Root GC CA, OU=OISTE Foundation Endorsed, O=WISeKey, C=CH

 

security-libs/javax.net.ssl
 Include Client's Host and Port in DTLS Cookie (JDK-8373275 (not public))

The DTLS implementation in the SunJSSE security provider has been enhanced to generate HelloVerifyRequest cookies as recommended by RFC 6347. To use this feature, applications must create the SSLEngine with the SSLContext.createSSLEngine(String peerHost, int peerPort) API.

hotspot/jfr
 JFR Event jdk.OldObjectSample Disabled for Generational ZGC (JDK-8382740)

The JFR event jdk.OldObjectSample is disabled when using generational ZGC.

The combination results in unacceptable performance overhead because the implementation relies on weak handles that, in generational ZGC, are processed only in the old generation.

security-libs/java.security
 Limiting the Size of Certificate Revocation List (CRL) Downloads (JDK-8381796 (not public))

A new system and security property, com.sun.security.crl.maxSize, has been added to limit the maximum length of a CRL that is downloaded through URIs in the CRL Distribution Points certificate extension during path validation. The value of these properties is the size in bytes of the DER-encoded CRL. For protocols that can return multivalue responses, such as LDAP, the size threshold is the sum of all CRLs downloaded from a single search query. CRLs that exceed this length will not be processed during certificate path validation. This size limit does not apply to CRLs that are imported through non-network-based means. A negative value disables this size limitation. A non-numeric value will be ignored, and the default size will be used instead. The default size limit is 20 MiB. For cases where both the security and system properties are set, the system property takes precedence. Enabling certificate path logging by setting java.security.debug=certpath will output the current size limit and note any discarded CRLs.

 

Fixes

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

Issues fixed in 26.0.2:
# JBS Component/Subcomponent Summary
1JDK-8369561client-libs/2dsun/java2d/OpenGL/DrawBitmaskImage.java#id0: Incorrect color for first pixel (actual=ff000000)
2JDK-8378201client-libs/2d[OGL] glXMakeContextCurrent() drops the buffers of the unbound drawable
3JDK-8378417client-libs/2dPrinting All pages results in NPE for 1.1 PrintJob
4JDK-8375057client-libs/2dUpdate HarfBuzz to 12.3.2
5JDK-8297191client-libs/2d[macos] Printing a page range with starting page > 1 results in missing pages
6JDK-8376233client-libs/java.awtClean up code in Desktop native peer
7JDK-8378727client-libs/java.awt[macOS] Missing dispatch_release for semaphores in CDesktopPeer
8JDK-8379256client-libs/java.awtUpdate GIFlib to 6.1.1
9JDK-8380959client-libs/java.awtUpdate Libpng to 1.6.56
10JDK-8380078client-libs/java.awtUpdate GIFlib to 6.1.2
11JDK-8382047client-libs/java.awtUpdate Libpng to 1.6.57
12JDK-8377526client-libs/java.awtUpdate Libpng to 1.6.55
13JDK-8286258client-libs/javax.accessibility[Accessibility,macOS,VoiceOver] VoiceOver reads the spinner value wrong and sometime partially
14JDK-8374727client-libs/javax.sound Audio configuration Platform class - use nio for getting endianness of the underlying platform
15JDK-8379952client-libs/javax.swingRevert JDK-8365711: Restore protected visibility of menuBarHeight and hotTrackingOn
16JDK-8374506client-libs/javax.swingIncorrect positioning of arrow icon in parent JMenu in Windows L&F
17JDK-8359433client-libs/javax.swingThe final modifier on Windows L&F internal UI classes prevents extending them in apps
18JDK-8377727client-libs/javax.swingGhost caret and focus appear in non‑editable text fields
19JDK-8383867core-libs/java.ioFile.getCanonicalPath drops backslash from UNC path with directory junctions
20JDK-8379967core-libs/java.lang(process) Improve ProcessBuilder error reporting
21JDK-8385665core-libs/java.langAddress possible oversized errors in Math.pow
22JDK-8373704core-libs/java.netImprove "SocketException: Protocol family unavailable" message
23JDK-8369950core-libs/java.netTLS connection to IPv6 address fails with BCJSSE due to IllegalArgumentException
24JDK-8376031core-libs/java.netHttpsURLConnection.getServerCertificates() throws "java.lang.IllegalStateException: connection not yet open" for the HEAD method
25JDK-8375294core-libs/java.nio(fs) Files.copy can fail with EOPNOTSUPP when copy_file_range not supported
26JDK-8378631core-libs/java.util.jarUpdate Zlib Data Compression Library to Version 1.3.2
27JDK-8381670core-libs/java.util.jarRevert the changes to GZIPInputStream related to InputStream.available() usage
28JDK-8382020core-libs/java.util:i18nTime Zone Abbreviation Not Localized for Non-English Locales
29JDK-8377944core-svc/java.lang.managementLowMemoryTest2.java#id1 intermittent fails OOME: Metaspace
30JDK-8373021hotspot/compileraarch64: MacroAssembler::arrays_equals reads out of bounds
31JDK-8374903hotspot/compilerC2 VectorAPI: assert(vbox->as_Phi()->region() == vect->as_Phi()->region()) failed
32JDK-8375010hotspot/compilerC2 VectorAPI: assert(vbox->is_CheckCastPP()) failed: should be expanded
33JDK-8366138hotspot/compilerParse::jump_switch_ranges() could cause stack overflow when compiling huge switch statement
34JDK-8378713hotspot/compilerC2: performance regression due to missing constant folding for Math.pow()
35JDK-8381596hotspot/compilerAdjust checks which use supports_ht() on x86 for hybrid CPUs
36JDK-8370502hotspot/compilerC2: segfault while adding node to IGVN worklist
37JDK-8374744hotspot/compilerEnable dumping of APX EGPRs (R16–R31) in JVM fatal error logs
38JDK-8376104hotspot/compilerC2 crashes in PhiNode::Ideal(PhaseGVN*, bool) accessing NULL pointer
39JDK-8375598hotspot/compilerVM crashes with "assert((labs(val) & 0xFFFFFFFF00000000) == 0 || dest == (address)-1) failed: must be 32bit offset or -1" when using too high value for NonNMethodCodeHeapSize
40JDK-8368977hotspot/compilerProvide clear naming for AVX10 identifiers
41JDK-8377949hotspot/jfrTestZRelocationSetEvent.java intermittent fails OOME
42JDK-8380011hotspot/jfrPath-to-gcroots search should not trigger stack overflows
43JDK-8376889hotspot/jfrEnhance JfrRecorder::on_create_vm_3() assert output
44JDK-8382242hotspot/jfrJFR: Metadata reconstruction invalidates ConstantMap for java.lang.String
45JDK-8376956hotspot/jvmtiAdd JVMTI phase entering/setting to hserr event log
46JDK-8376185hotspot/jvmtiNoSuchFieldError thrown after a record with type annotation retransformed
47JDK-8375311hotspot/runtimeSome builds are missing debug helpers
48JDK-8380474hotspot/runtimeCrash SEGV in ThreadIdTable::lazy_initialize after JDK-8323792
49JDK-8376402hotspot/runtimeDependencies::print_statistics() and AbstractClassHierarchyWalker::print_statistics() are not called from PRODUCT code
50JDK-8377932hotspot/runtimeAOT cache is not rejected when JAR file has changed
51JDK-8374343hotspot/runtimeFix SIGSEGV when lib/modules is unreadable
52JDK-8374998hotspot/runtimeFailing os::write - remove bad file
53JDK-8377512hotspot/runtimeAOT cache creation fails with invalid native pointer
54JDK-8380409hotspot/runtimeJVM crashes when -XX:AOTMode=create uses app.aotconf generated with JVMTI agent
55JDK-8377777hotspot/runtimeImprove logging when rejecting assets from the AOT archive
56JDK-8323792hotspot/svcThreadSnapshot::initialize can cause assert in Thread::check_for_dangling_thread_pointer (possibility of dangling Thread pointer)
57JDK-8378764hotspot/svcfileStream::fileSize() fails for >2GB files on Windows
58JDK-8379516hotspot/svcAdjust JVM debug helper exports
59JDK-8376485release-teamUpdate the release version and date for OpenJDK 26u
60JDK-8373690security-libs/java.securityUnexpected Keystore message using jdk.crypto.disabledAlgorithms
61JDK-8381937security-libs/java.securityMake exceptions in Java_sun_security_mscapi_CKeyPairGenerator generateCKeyPair more specific
62JDK-8373928tools/launcher4 Dangling pointer defect groups in java.c