java-25-openjdk/SOURCES/NEWS
2026-04-22 21:38:45 +00:00

1514 lines
87 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Key:
JDK-X - https://bugs.openjdk.java.net/browse/JDK-X
CVE-XXXX-YYYY: https://cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY
New in release OpenJDK 25.0.3 (2026-04-21):
===========================================
Live versions of these release notes can be found at:
* https://bit.ly/openjdk2503
* CVEs
- CVE-2026-22007
- CVE-2026-22008
- CVE-2026-22013
- CVE-2026-22016
- CVE-2026-22018
- CVE-2026-22021
- CVE-2026-23865
- CVE-2026-34268
- CVE-2026-34282
* Changes
- JDK-7191877: TEST_BUG: java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java failing intermittently
- JDK-8030957: AIX: Implement OperatingSystemMXBean.getSystemCpuLoad() and .getProcessCpuLoad() on AIX
- JDK-8068378: [TEST_BUG]The java/awt/Modal/PrintDialogsTest/PrintDialogsTest.java instruction need to update
- JDK-8183336: Better cleanup for jdk/test/java/lang/module/customfs/ModulesInCustomFileSystem.java
- JDK-8212084: G1: Implement UseGCOverheadLimit
- JDK-8244336: Restrict algorithms at JCE layer
- JDK-8246037: Shenandoah: update man pages to mention -XX:+UseShenandoahGC
- JDK-8255463: java/nio/channels/spi/SelectorProvider/inheritedChannel/InheritedChannelTest.java failed with ThreadTimeoutException
- JDK-8256289: java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java failed with "RuntimeException: Wrong focus owner: java.awt.Button[button1,41,36,56x23,label=Button1]"
- JDK-8274082: Wrong test name in jtreg run tag for java/awt/print/PrinterJob/SwingUIText.java
- JDK-8286258: [Accessibility,macOS,VoiceOver] VoiceOver reads the spinner value wrong and sometime partially
- JDK-8286865: vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/Test.java fails with Out of space in CodeCache
- JDK-8287062: com/sun/jndi/ldap/LdapPoolTimeoutTest.java failed due to different timeout message
- JDK-8293484: AArch64: TestUseSHA512IntrinsicsOptionOnSupportedCPU.java fails on CPU with SHA512 feature support
- JDK-8299304: Test "java/awt/print/PrinterJob/PageDialogTest.java" fails on macOS 13 x64 because the Page Dialog blocks the Toolkit
- JDK-8307495: Specialize atomic bitset functions for aix-ppc
- JDK-8313770: jdk/internal/platform/docker/TestSystemMetrics.java fails on Ubuntu
- JDK-8316274: javax/swing/ButtonGroup/TestButtonGroupFocusTraversal.java fails in Ubuntu 23.10 with Motif LAF
- JDK-8317838: java/nio/channels/Channels/SocketChannelStreams.java running into timeout (aix)
- JDK-8318662: Refactor some jdk/java/net/httpclient/http2 tests to JUnit
- JDK-8320677: Printer tests use invalid '@run main/manual=yesno
- JDK-8333857: Test sun/security/ssl/SSLSessionImpl/ResumeChecksServer.java failed: Existing session was used
- JDK-8333871: Check return values of sysinfo
- JDK-8334928: Test sun/security/ssl/SSLSocketImpl/ReuseAddr.java failed: java.net.BindException: Address already in use
- JDK-8335646: Nimbus : JLabel not painted with LAF defined foreground color on Ubuntu 24.04
- JDK-8336695: Update Commons BCEL to Version 6.10.0
- JDK-8339791: Refactor MiscUndecorated/ActiveAWTWindowTest.java
- JDK-8341039: compiler/cha/TypeProfileFinalMethod.java fails with assertEquals expected: 0 but was: 2
- JDK-8342175: MemoryEaterMT fails intermittently with ExceptionInInitializerError
- JDK-8342401: [TESTBUG] javax/swing/JSpinner/8223788/JSpinnerButtonFocusTest.java test fails in ubuntu 22.04 on SBR Hosts
- JDK-8342640: GenShen: Silently ignoring ShenandoahGCHeuristics considered poor user-experience
- JDK-8342659: Test vmTestbase/nsk/jdi/ObjectReference/referringObjects/referringObjects002/referringObjects002.java failed: Class nsk.share.jdi.TestClass1 was not unloaded
- JDK-8343316: Review and update tests using explicit provider names
- JDK-8343340: Swapping checking do not work for MetricsMemoryTester failcount
- JDK-8343474: [updates] Customize README.md to specifics of update project
- JDK-8344073: Test runtime/cds/appcds/TestParallelGCWithCDS.java#id0 failed
- JDK-8346154: [XWayland] Some tests fail intermittently in the CI, but not locally
- JDK-8346962: Test CRLReadTimeout.java fails with -Xcomp on a fastdebug build
- JDK-8348014: Enhance certificate processing
- JDK-8349192: jvmti/scenarios/contention/TC05/tc05t001 fails: ERROR: tc05t001.cpp, 281: (waitedThreadCpuTime - waitThreadCpuTime) < (EXPECTED_ACCURACY * 1000000)
- JDK-8352149: Test java/awt/Frame/MultiScreenTest.java fails: Window list is empty
- JDK-8353755: Add a helper method to Util - findComponent()
- JDK-8354244: Use random data in MinMaxRed_Long data arrays
- JDK-8354469: Keytool exposes the password in plain text when command is piped using | grep
- JDK-8354894: java/lang/Thread/virtual/Starvation.java timeout on server with high CPUs
- JDK-8354937: Cleanup some sparc related coding in os_linux
- JDK-8356548: Use ClassFile API instead of ASM to transform classes in tests
- JDK-8356868: Not all cgroup parameters are made available
- JDK-8357277: Update OpenSSL library for interop tests
- JDK-8357380: java/lang/StringBuilder/RacingSBThreads.java times out with C1
- JDK-8357390: java/awt/Toolkit/ScreenInsetsTest/ScreenInsetsTest.java Test failing on Ubuntu 24.04 Vm Hosts used by Oracle's internal CI system
- JDK-8357470: src/java.base/share/classes/sun/security/util/Debug.java implement the test for args.toLowerCase
- JDK-8357570: [macOS] os::Bsd::available_memory() might return too low values
- JDK-8357591: Re-enable CDS test cases for jvmci after JDK-8345826
- JDK-8358058: sun/java2d/OpenGL/DrawImageBg.java Test fails intermittently
- JDK-8358159: Empty mode/padding in cipher transformations
- JDK-8358529: GenShen: Heuristics do not respond to changes in SoftMaxHeapSize
- JDK-8358679: [asan] vmTestbase/nsk/jvmti tests show memory issues
- JDK-8358686: CDS and AOT can cause buffer truncation warning even when logging is disabled
- JDK-8358735: GenShen: block_start() may be incorrect after class unloading
- JDK-8358756: [s390x] Test StartupOutput.java crash due to CodeCache size
- JDK-8358801: javac produces class that does not pass verifier.
- JDK-8359064: Expose reason for marking nmethod non-entrant to JVMCI client
- JDK-8359182: Use @requires instead of SkippedException for MaxPath.java
- JDK-8359388: Stricter checking for cipher transformations
- JDK-8359418: Test "javax/swing/text/GlyphView/bug4188841.java" failed because the phrase of text pane does not match the instructions
- JDK-8359472: JVM crashes when attaching a dynamic agent before JVMTI_PHASE_LIVE
- JDK-8359707: Add classfile modification code to RedefineClassHelper
- JDK-8359868: Shenandoah: Free threshold heuristic does not use SoftMaxHeapSize
- JDK-8359978: Test javax/net/ssl/SSLSocket/Tls13PacketSize.java failed again with java.net.SocketException: An established connection was aborted by the software in your host machine
- JDK-8360049: CodeInvalidationReasonTest.java fails with ZGC on AArch64
- JDK-8360160: ubuntu-22-04 machine is failing client tests
- JDK-8360169: Problem list CodeInvalidationReasonTest.java on linux-riscv64 until JDK-8360168 is fixed
- JDK-8360271: String.indexOf intrinsics fail with +EnableX86ECoreOpts and -CompactStrings
- JDK-8360395: sun/security/tools/keytool/i18n.java user country is current user location instead of the language
- JDK-8360539: DTLS handshakes fails due to improper cookie validation logic
- JDK-8360562: sun/security/tools/keytool/i18n.java add an ability to add comment for failures
- JDK-8360702: runtime/Thread/AsyncExceptionTest.java timed out
- JDK-8360882: Tests throw SkippedException when they should fail
- JDK-8361067: Test ExtraButtonDrag.java requires frame.dispose in finally block
- JDK-8361106: [TEST] com/sun/net/httpserver/Test9.java fails with java.nio.file.FileSystemException
- JDK-8361363: ShenandoahAsserts::print_obj() does not work for forwarded objects and UseCompactObjectHeaders
- JDK-8361381: GlyphLayout behavior differs on JDK 11+ compared to JDK 8
- JDK-8361492: [IR Framework] Has too restrictive regex for load and store
- JDK-8361521: BogusFocusableWindowState.java fails with StackOverflowError on Linux
- JDK-8361530: Test javax/swing/GraphicsConfigNotifier/StalePreferredSize.java timed out
- JDK-8361613: System.console() should only be available for interactive terminal
- JDK-8361894: sun/security/krb5/config/native/TestDynamicStore.java ensure that the test is run with sudo
- JDK-8362284: RISC-V: cleanup NativeMovRegMem
- JDK-8362979: C2 fails with unexpected node in SuperWord truncation: CmpLTMask, RoundF
- JDK-8363950: Incorrect jtreg header in TestLayoutVsICU.java
- JDK-8364373: Transform Affine transformations
- JDK-8364465: Enhance behavior of some intrinsics
- JDK-8364580: Test compiler/vectorization/TestSubwordTruncation.java fails on platforms without RoundF/RoundD
- JDK-8364741: [asan] runtime/ErrorHandling/PrintVMInfoAtExitTest.java fails because output differs slightly
- JDK-8364756: JFR: Improve slow tests
- JDK-8364936: Shenandoah: Switch nmethod entry barriers to conc_instruction_and_data_patch
- JDK-8365065: cancelled ForkJoinPool tasks no longer throw CancellationException
- JDK-8365184: sun/tools/jhsdb/HeapDumpTestWithActiveProcess.java Re-enable SerialGC flag on debuggee process
- JDK-8365305: The ARIA role contentinfo is not valid for the element <footer>
- JDK-8365398: TEST_BUG: java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java failing intermittently
- JDK-8365526: Crash with null Symbol passed to SystemDictionary::resolve_or_null
- JDK-8365570: C2 fails assert(false) failed: Unexpected node in SuperWord truncation: CastII
- JDK-8365776: Convert JShell tests to use JUnit instead of TestNG
- JDK-8365861: test/jdk/sun/security/pkcs11/Provider/ tests skipped without SkippedException
- JDK-8365972: JFR: ThreadDump and ClassLoaderStatistics events may cause back to back rotations
- JDK-8366082: Improve queue size computation in CPU-time sampler
- JDK-8366128: jdk/jdk/nio/zipfs/TestPosix.java::testJarFile uses wrong file
- JDK-8366182: Some PKCS11Tests are being skipped when they shouldn't
- JDK-8366261: Provide utility methods for sun.security.util.Password
- JDK-8366278: Form control element <select> has no associated label
- JDK-8366369: Add @requires linux for GTK L&F tests
- JDK-8366486: Test jdk/jfr/event/profiling/TestCPUTimeSampleMultipleRecordings.java is timing out
- JDK-8366733: Re-examine older java.text NF, DF, and DFS serialization tests
- JDK-8366747: RISC-V: Improve VerifyMethodHandles for method handle linkers
- JDK-8366817: test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcServer.java and JdkProcClient.java should not delete logs
- JDK-8366874: Test gc/arguments/TestParallelGCErgo.java fails with UseTransparentHugePages
- JDK-8366878: Improve flags of compiler/loopopts/superword/TestAlignVectorFuzzer.java
- JDK-8366908: Use a different class for testing JDK-8351654
- JDK-8366938: Test runtime/handshake/HandshakeTimeoutTest.java crashed
- JDK-8366951: Test runtime/logging/StressAsyncUL.java is timing out
- JDK-8367135: Test compiler/loopstripmining/CheckLoopStripMining.java needs internal timeouts adjusted
- JDK-8367271: Add parsing tests to DateFormat JMH benchmark
- JDK-8367278: Test compiler/startup/StartupOutput.java timed out after completion on Windows
- JDK-8367302: New test jdk/jfr/event/profiling/TestCPUTimeSampleQueueAutoSizes.java from JDK-8366082 is failing
- JDK-8367371: Remove @requires vm.opt.UseLargePages from InternSharedString.java test
- JDK-8367372: Test `test/hotspot/jtreg/gc/TestObjectAlignmentCardSize.java` fails on 32 bit systems
- JDK-8367463: Improved Arena allocations
- JDK-8367583: sun/security/util/AlgorithmConstraints/InvalidCryptoDisabledAlgos.java fails after JDK-8244336
- JDK-8367772: Refactor createUI in PassFailJFrame
- JDK-8367784: java/awt/Focus/InitialFocusTest/InitialFocusTest1.java failed with Wrong focus owner
- JDK-8367862: debug.cpp: Do not print help message for methods ifdef'd out
- JDK-8367901: Calendar.roll(hour, 24) returns wrong result
- JDK-8367994: test/jdk/sun/security/pkcs11/Signature/ tests pass when they should skip
- JDK-8368029: Several tests in httpserver/simpleserver should throw SkipException
- JDK-8368182: AOT cache creation fails with class defined by JNI
- JDK-8368328: CompactNumberFormat.clone does not produce independent instances
- JDK-8368335: Refactor the rest of Locale TestNG based tests to JUnit
- JDK-8368498: Use JUnit instead of TestNG for jdk_text tests
- JDK-8368500: ContextClassLoader cannot be reset on threads in ForkJoinPool.commonPool()
- JDK-8368551: Core dump warning may be confusing
- JDK-8368625: com/sun/net/httpserver/ServerStopTerminationTest.java fails intermittently
- JDK-8368677: acvp test should throw SkippedException when no ACVP-Server available
- JDK-8368683: [process] Increase jtreg debug output maxOutputSize for TreeTest
- JDK-8368754: runtime/cds/appcds/SignedJar.java log regex is too strict
- JDK-8368787: Error reporting: hs_err files should show instructions when referencing code in nmethods
- JDK-8368866: compiler/codecache/stress/UnexpectedDeoptimizationTest.java intermittent timed out
- JDK-8368882: NPE during text drawing on machine with JP locale
- JDK-8368885: NMT CommandLine tests can check for error better
- JDK-8368892: Make JEditorPane/TestBrowserBGColor.java headless
- JDK-8369032: Add test to ensure serialized ICC_Profile stores only necessary optional data
- JDK-8369050: DecimalFormat Rounding Errors for Fractional Ties Near Zero
- JDK-8369227: Virtual thread stuck in PARKED state
- JDK-8369255: Assess and remedy any unsafe usage of the Semaphores used by JFR
- JDK-8369282: Distrust TLS server certificates anchored by Chunghwa ePKI Root CA
- JDK-8369335: Two sun/java2d/OpenGL tests fail on Windows after JDK-8358058
- JDK-8369505: jhsdb jstack cannot handle continuation stub
- JDK-8369516: Delete duplicate imaging test
- JDK-8369575: Enhance crypto algorithm support
- JDK-8369804: TestGenerators.java fails with IllegalArgumentException: bound must be greater than origin
- JDK-8369851: Remove darcy author tags from langtools tests
- JDK-8369858: Remove darcy author tags from jdk tests
- JDK-8369881: C2: Unexpected node in SuperWord truncation: ReverseBytesS, ReverseBytesUS
- JDK-8369911: Test sun/java2d/marlin/ClipShapeTest.java#CubicDoDash, #Cubic and #Poly fail intermittent
- JDK-8369991: Thread blocking during JFR emergency dump must be in safepoint safe state
- JDK-8370036: TestJhsdbJstackWithVirtualThread.java fails when run with -showversion
- JDK-8370064: Test runtime/NMT/CheckForProperDetailStackTrace.java fails on Windows when using stripped pdb files
- JDK-8370197: Add missing @Override annotations in com.sun.beans package
- JDK-8370201: Test serviceability/sa/TestJhsdbJstackWithVirtualThread.java fails due to VM warnings
- JDK-8370203: Add jcmd AOT.end_recording diagnostic command
- JDK-8370240: [PPC64] jhsdb jstack cannot handle continuation stub
- JDK-8370242: JFR: Clear event reference eagerly when using EventStream
- JDK-8370244: [PPC64] Several vector tests fail on Power8
- JDK-8370325: G1: Disallow GC for TLAB allocation
- JDK-8370378: Some compiler tests inadvertently exclude particular platforms
- JDK-8370393: Cleanup handling of ancient Windows versions from GetJavaProperties java_props_md
- JDK-8370405: C2: mismatched store from MergeStores wrongly scalarized in allocation elimination
- JDK-8370492: [Linux] Update cpu shares to cpu.weight mapping function
- JDK-8370511: test/jdk/javax/swing/JSlider/bug4382876.java does not release previously pressed keys
- JDK-8370529: Enhance Path Factories Redux
- JDK-8370572: Cgroups hierarchical memory limit is not honored after JDK-8322420
- JDK-8370579: PPC: fix inswri immediate argument order
- JDK-8370615: Improve Kerberos credentialing
- JDK-8370636: com/sun/jdi/TwoThreadsTest.java should wait for completion of all threads
- JDK-8370646: TestLargeUTF8Length.java needs lots of memory
- JDK-8370649: Add intermittent tag for gc/shenandoah/generational/TestOldGrowthTriggers.java
- JDK-8370708: RISC-V: Add VerifyStackAtCalls
- JDK-8370730: Test serviceability/attach/EarlyDynamicLoad/EarlyDynamicLoad.java needs to be resilient about warnings
- JDK-8370732: Use WhiteBox.getWhiteBox().fullGC() to provoking gc for nsk/jvmti tests
- JDK-8370887: DelayScheduler.replace method may break the 4-ary heap in certain scenarios
- JDK-8370905: Update vm.defmeth tests to use virtual threads
- JDK-8370942: test/jdk/java/security/Provider/NewInstance.java and /test/jdk/java/security/cert/CertStore/NoLDAP.java may skip without notifying
- JDK-8370966: Create regression test for the hierarchical memory limit fix in JDK-8370572
- JDK-8370986: Enhance Zip file reading
- JDK-8370995: Enhance ZipFile usage
- JDK-8371014: Dump JFR recording on CrashOnOutOfMemoryError is incorrectly implemented
- JDK-8371103: vmTestbase/nsk/jvmti/scenarios/events/EM02/em02t006/TestDescription.java failing
- JDK-8371262: sun/security/pkcs11/Cipher/KeyWrap tests may silently skip
- JDK-8371316: Adjust assertion (GC pause time cannot be smaller than the sum of each phase) in G1GCPhaseTimes::print
- JDK-8371349: Update NSS library to 3.117
- JDK-8371364: Refactor javax/swing/JFileChooser/FileSizeCheck.java to use Util.findComponent()
- JDK-8371365: Update javax/swing/JFileChooser/bug4759934.java to use Util.findComponent()
- JDK-8371366: java/net/httpclient/whitebox/RawChannelTestDriver.java fails intermittently in jtreg timeout
- JDK-8371368: SIGSEGV in JfrVframeStream::next_vframe() on arm64
- JDK-8371383: Test sun/security/tools/jarsigner/DefaultOptions.java failed due to CertificateNotYetValidException
- JDK-8371385: compiler/escapeAnalysis/TestRematerializeObjects.java fails in case of -XX:-UseUnalignedAccesses
- JDK-8371420: Still sporadic failures of gc/TestAlwaysPreTouchBehavior.java#<gcname> on Linux after JDK-8359104
- JDK-8371485: ProblemList awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java for linux
- JDK-8371559: Intermittent timeouts in test javax/net/ssl/Stapling/HttpsUrlConnClient.java
- JDK-8371608: Jtreg test jdk/internal/vm/Continuation/Fuzz.java sometimes fails with (fast)debug binaries
- JDK-8371759: Add missing @Override annotations in com.sun.imageio package
- JDK-8371769: TestMemoryInvisibleParent.java fails with java.nio.file.AccessDeniedException
- JDK-8371830: Enhance certificate chain validation
- JDK-8371854: Shenandoah: Simplify WALK_FORWARD_IN_BLOCK_START use
- JDK-8371864: GaloisCounterMode.implGCMCrypt0 AVX512/AVX2 intrinsics stubs cause AES-GCM encryption failure for certain payload sizes
- JDK-8371895: Lower GCTimeLimit in TestUseGCOverheadLimit.java
- JDK-8371935: Enhance key generation
- JDK-8371944: AOT configuration is corrupted when app closes System.out
- JDK-8371948: TestStackOverflowDuringInit.java fails xss too small on linux-aarch64
- JDK-8371966: RISC-V: Incorrect pointer dereference in TemplateInterpreterGenerator::generate_native_entry
- JDK-8371967: Add Visual Studio 2026 to build toolchain for Windows
- JDK-8371978: tools/jar/ReproducibleJar.java fails on XFS
- JDK-8372012: java/nio/file/attribute/BasicFileAttributeView/SetTimesNanos.java should check ability to create links
- JDK-8372046: compiler/floatingpoint/TestSubNodeFloatDoubleNegation.java fails IR verification
- JDK-8372048: Performance improvement on Linux remote desktop
- JDK-8372110: GenShen: Fix erroneous assert
- JDK-8372120: Add missing sound keyword to MIDI tests
- JDK-8372147: ConnectionFlowControlTest should use HttpResponse.connectionLabel()
- JDK-8372321: TestBackToBackSensitive fails intermittently after JDK-8365972
- JDK-8372348: Adjust some UL / JFR string deduplication output messages
- JDK-8372412: Increase buffer size for ring-buffer events in CollectedHeap
- JDK-8372441: JFR: Improve logging of TestBackToBackSensitive
- JDK-8372534: Update Libpng to 1.6.51
- JDK-8372586: Crashes on ppc64(le) after JDK-8371368
- JDK-8372589: VM crashes on init when NonNMethodCodeHeapSize is set too small and UseTransparentHugePages is enabled
- JDK-8372591: assert(!current->cont_fastpath() || freeze.check_valid_fast_path()) failed
- JDK-8372609: Bug4944439 does not enforce locale correctly
- JDK-8372661: Add a null-safe static factory method to "jdk.test.lib.net.SimpleSSLContext"
- JDK-8372704: ThreadMXBean.getThreadUserTime may return total time
- JDK-8372710: Update ProcessBuilder/Basic regex
- JDK-8372733: GHA: Bump to Ubuntu 24.04
- JDK-8372756: Mouse additional buttons and horizontal scrolling are broken on XWayland GNOME >= 47 after JDK-8351907
- JDK-8372835: WorkQueue::push is missing an acquire-fence
- JDK-8372857: Improve debuggability of java/rmi/server/RemoteServer/AddrInUse.java test
- JDK-8372860: TestCodeCacheUnloadDuringConcCycle fails on ARM32
- JDK-8372977: Unnecessary gthread-2.0 loading
- JDK-8372988: Test runtime/Nestmates/membership/TestNestHostErrorWithMultiThread.java failed: Unexpected interrupt
- JDK-8373021: aarch64: MacroAssembler::arrays_equals reads out of bounds
- JDK-8373101: JdkClient and JdkServer test classes ignore namedGroups field
- JDK-8373106: JFR suspend/resume deadlock on macOS in pthreads library
- JDK-8373290: Update FreeType to 2.14.1
- JDK-8373429: gc/g1/TestCodeCacheUnloadDuringConcCycle fails on various platforms
- JDK-8373476: (tz) Update Timezone Data to 2025c
- JDK-8373485: JFR Crash during sampling: assert(jt->has_last_Java_frame()) failed: invariant
- JDK-8373525: C2: assert(_base == Long) failed: Not a Long
- JDK-8373537: Migrate "test/jdk/com/sun/net/httpserver/" to null-safe "SimpleSSLContext" methods
- JDK-8373593: Support latest VS2026 MSC_VER in abstract_vm_version.cpp
- JDK-8373623: Refactor Serialization tests for Records to JUnit
- JDK-8373630: r18_tls should not be modified on Windows AArch64
- JDK-8373632: Some sound tests failing in CI due to lack of sound key
- JDK-8373704: Improve "SocketException: Protocol family unavailable" message
- JDK-8373716: Refactor further java/util tests from TestNG to JUnit
- JDK-8373727: New XBM images parser regression: only the first line of the bitmap array is parsed
- JDK-8373793: TestDynamicStore.java '/manual' disables use of '/timeout'
- JDK-8373807: test/jdk/java/net/httpclient/websocket/DummyWebSocketServer.java getURI() uses "localhost"
- JDK-8373832: Test java/lang/invoke/TestVHInvokerCaching.java tests nothing
- JDK-8373869: Refactor java/net/httpclient/ThrowingPushPromises*.java tests to use JUnit5
- JDK-8373931: Test javax/sound/sampled/Clip/AutoCloseTimeCheck.java timed out
- JDK-8373946: Synth ProgressBarUI implementation confuses background painting with border painting
- JDK-8373984: Check for macos 11 in CGraphicsDevice.m can be removed
- JDK-8373998: RISC-V: simple optimization of ConvHF2F
- JDK-8374056: RISC-V: Fix argument passing for the RiscvFlushIcache::flush
- JDK-8374178: Missing include in systemDictionary.cpp after JDK-8365526
- JDK-8374433: java/util/Locale/PreserveTagCase.java does not run any tests
- JDK-8374434: Several JShell tests report JUnit discovery warnings
- JDK-8374525: RISC-V: Several masked float16 vector operations are not supported
- JDK-8374555: No need for visible input warning in s.s.u.Password when not reading from System.in
- JDK-8374557: Enhance TLS connection handling
- JDK-8374642: EscapeHash macro fails with GNU make 4.3 and 4.4
- JDK-8374644: Regression in GZIPInputStream performance after JDK-7036144
- JDK-8374711: Hotspot runtime/CommandLine/OptionsValidation/TestOptionsWithRanges fails without printing the option name
- JDK-8374872: Cleanup outdated SAP AG copyright header info
- JDK-8374875: Improve perfMemory warning about 'Insufficient space for shared memory file'
- JDK-8375057: Update HarfBuzz to 12.3.2
- JDK-8375063: Update Libpng to 1.6.54
- JDK-8375094: RISC-V: Fix client builds after JDK-8368732
- JDK-8375231: Refactor util/ServiceLoader tests to use JUnit
- JDK-8375232: Refactor util/StringJoiner tests to use JUnit
- JDK-8375233: Refactor util/Vector tests to use JUnit
- JDK-8375311: Some builds are missing debug helpers
- JDK-8375530: PPC64: incorrect quick verify_method_data_pointer check causes poor performance in debug build
- JDK-8375549: ConcurrentModificationException if jdk.crypto.disabledAlgorithms has multiple entries with known oid
- JDK-8375598: VM crashes with "assert((labs(val) & 0xFFFFFFFF00000000) == 0 || dest == (address)-1) failed: must be 32bit offset or -1" when using too high value for NonNMethodCodeHeapSize
- JDK-8375657: RISC-V: Need to check size in SharedRuntime::is_wide_vector
- JDK-8375742: Test java/lang/invoke/MethodHandleProxies/Driver.java does not run Unnamed.java
- JDK-8375963: [25u] Set designator DEFAULT_PROMOTED_VERSION_PRE=ea in jdk25u-dev
- JDK-8375999: com/sun/jndi/ldap/LdapPoolTimeoutTest.java fails sporadically on Windows
- JDK-8376572: RISC-V: Interpreter: Load array index as signed int
- JDK-8376688: Gtest os.attempt_reserve_memory_between_small_range_fill_hole_vm fails on AIX 7.3
- JDK-8376889: Enhance JfrRecorder::on_create_vm_3() assert output
- JDK-8377347: jdk/jfr/event/gc/detailed/TestZAllocationStallEvent.java intermittent OOME
- JDK-8377509: Add licenses for gcc 14.2.0
- JDK-8377526: Update Libpng to 1.6.55
- JDK-8377811: [25u] G1: Optional Evacuations may evacuate pinned objects
- JDK-8377898: Hotspot build on AIX with unused-functions warning reports some unused functions
- JDK-8377905: gcc.md included with every build
- JDK-8378113: Add sun/java2d/OpenGL/ScaleParamsOOB.java to the ProblemList.txt file
- JDK-8378218: MSYS2 reports cygwin triplet causing bash configure failure
- JDK-8378353: [PPC64] StringCoding.countPositives causes errors when the length is not a proper 32 bit int
- JDK-8378623: Use unique font names in FormatCharAdvanceTest
- JDK-8378631: Update Zlib Data Compression Library to Version 1.3.2
- JDK-8378823: AIX build fails after zlib updated by JDK-8378631
- JDK-8378853: [25u] Make backport of JDK-8244336 comply with differences in CSR
- JDK-8379035: (tz) Update Timezone Data to 2026a
- JDK-8379158: Update FreeType to 2.14.2
- JDK-8379256: Update GIFlib to 6.1.1
- JDK-8380078: Update GIFlib to 6.1.2
- JDK-8380959: Update Libpng to 1.6.56
- JDK-8382047: Update Libpng to 1.6.57
- JDK-8382438: [25u] Remove designator DEFAULT_PROMOTED_VERSION_PRE=ea for release 25.0.3
Notes on individual issues:
===========================
security-libs/javax.net.ssl:
JDK-8369282: Distrust TLS server certificates anchored by Chunghwa ePKI Root CA
===============================================================================
In accordance with similar plans recently announced by Google and
Mozilla, the JDK will not trust Transport Layer Security (TLS)
certificates issued after the 17th of March 2026 which are anchored by
Chungwa root certificates.
Certificates issued on or before the 17th of March, 2026 will continue
to be trusted until they expire.
If a server's certificate chain is anchored by an affected
certificate, attempts to negotiate a TLS session will fail with an
Exception that indicates the trust anchor is not trusted. For example,
"TLS server certificate issued after 2026-03-17 and anchored by a
distrusted legacy Chungwa root CA: OU=ePKI Root Certification
Authority, O="Chunghwa Telecom Co.", Ltd. C=TW"
To check whether a certificate in a JDK keystore is affected by this
change, you can the `keytool` utility:
keytool -v -list -alias <your_server_alias> -keystore <your_keystore_filename>
If any of the certificates in the chain are affected by this change,
then you will need to update the certificate or contact the
organisation responsible for managing the certificate.
These restrictions apply to the following Chungwa root certificates
included in the JDK:
Alias name: chunghwaepkirootca
OU=ePKI Root Certification Authority
O="Chunghwa Telecom Co., Ltd."
C=TW
SHA256: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
Users can, *at their own risk*, remove this restriction by modifying
the `java.security` configuration file (or override it by using the
`java.security.properties` system property) so "CHUNGWA_TLS" is no
longer listed in the `jdk.security.caDistrustPolicies` security
property.
hotspot/jfr:
JDK-8365972: JFR: ThreadDump and ClassLoaderStatistics events may cause back to back rotations
==============================================================================================
In previous OpenJDK releases, the `jdk.ThreadDump` and
`jdk.ClassLoaderStatistics` events were written at the beginning of a
new file created by a file rotation. However, in applications with
many threads (typically more than a thousand), deep Java stacks
(typically more than three hundred frames) or many class loaders
(typically hundreds of thousands), the size of these events alone
could trigger a further file rotation within one second. This causes
other relevant data to be flushed out very quickly (e.g. about fifteen
seconds if using the default 250MB max file size). In this release,
these events are only written when a recording starts and at the end
of a file rotation.
security-libs/java.security:
JDK-8244336: Restrict algorithms at JCE layer
=============================================
A security property named `jdk.crypto.disabledAlgorithms` has been
added that can be used to disable JCE/JCA cryptographic services. The
property accepts a comma-separated list of services, specified as
Service.AlgorithName. The current list of supported services is
`Cipher`, `KeyStore`, `MessageDigest` and `Signature`. Algorithms
should be drawn from those specified by the Java Security Standard
Algorithm Names Specification [0]. For example:
jdk.crypto.disabledAlgorithms=Cipher.RSA/ECB/PKCS1Padding, MessageDigest.MD2
would disable the RSA cipher when used with the ECB cipher algorithm
mode and PKCS #1 algorithm padding, and the MD2 message digest
algorithm.
The default value for this security property is empty, which means
that no algorithms are disabled out-of-the-box. The value of the
security property specified in `java.security` can be overridden by
specifying a system property of the same name,
`jdk.crypto.disabledAlgorithms`. With the above example in place in
`java.security`, running `java` as:
$ java -Djdk.crypto.disabledAlgorithms=
would cause these algorithms to be enabled for that run of the Java
virtual machine.
[0] https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html
JDK-8354469: Keytool exposes the password in plain text when command is piped using | grep
==========================================================================================
The `keytool` and `jarsigner` commands read passwords using the system
console with echoing disabled to avoid them being displayed on screen.
However, the system console is usually only available when both the
standard input and standard output have *not* been redirected. In
previous OpenJDK releases, running these tools with input or output
redirected would cause the password to be echoed to the screen in
plain text. With this release, echoing no longer takes place in such
scenarios when using these tools or the JAAS `TextCallbackHandler`
API.
hotspot/gc:
JDK-8212084: G1: Implement UseGCOverheadLimit
=============================================
In this release, the G1 garbage collector now respects the values of
`GCTimeLimit` and `GCHeapFreeLimit`. The garbage collector will throw
an `OutOfMemoryException` (OOME) when the garbage collection overhead
is more than `GCTimeLimit` percent (default: 98%) and the free Java
heap is less than `GCHeapFreeLimit` (default: 2%) for five consecutive
garbage collections.
This feature is enabled by default. It may be disabled by specifying
the `-XX:-UseGCOverheadLimit` option. The implementation mirrors the
functionality already provided by the parallel garbage collector,
though there may be differences in the exact conditions when an OOME
is triggered, due to differences in the way the collectors calculate
the collection overhead and free Java heap.
New in release OpenJDK 25.0.2 (2026-01-20):
===========================================
* CVEs
- CVE-2026-21925
- CVE-2026-21932
- CVE-2026-21933
- CVE-2026-21945
* Changes
- JDK-8023263: [TESTBUG] Test closed/java/awt/Focus/InactiveWindowTest/InactiveFocusRace fails due to not enough time to initialize graphic components
- JDK-8162380: [TEST_BUG] MouseEvent/.../AltGraphModifierTest.java has only "Fail" button
- JDK-8201778: Speed up test javax/net/ssl/DTLS/PacketLossRetransmission.java
- JDK-8265429: Improve GCM encryption
- JDK-8277444: Data race between JvmtiClassFileReconstituter::copy_bytecodes and class linking
- JDK-8279005: sun/tools/jstat tests do not check for test case exit codes after JDK-8245129
- JDK-8304811: vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/INDIFY_Test.java fails with JVMTI_ERROR_TYPE_MISMATCH
- JDK-8305567: serviceability/tmtools/jstat/GcTest01.java failed utils.JstatGcResults.assertConsistency
- JDK-8317801: java/net/Socket/asyncClose/Race.java fails intermittently (aix)
- JDK-8320836: jtreg gtest runs should limit heap size
- JDK-8325766: Extend CertificateBuilder to create trust and end entity certificates programmatically
- JDK-8333526: Restructure java/nio/channels/DatagramChannel/StressNativeSignal.java to a fail fast exception handling policy
- JDK-8333783: java/nio/channels/FileChannel/directio/DirectIOTest.java is unstable with AV software
- JDK-8334238: Enhance AddLShortcutTest jpackage test
- JDK-8335986: Test javax/swing/JCheckBox/4449413/bug4449413.java fails on Windows 11 x64 because RBMenuItem's and CBMenuItem's checkmark on the left side are not visible
- JDK-8341496: Improve JMX connections
- JDK-8343218: Add option to disable allocating interface and abstract classes in non-class metaspace
- JDK-8343546: GHA: Cache required dependencies in master-branch workflow
- JDK-8345810: Custom launchers must be linked with pthread to avoid dynamic linker issues
- JDK-8346753: Test javax/swing/JMenuItem/RightLeftOrientation/RightLeftOrientation.java fails on Windows Server 2025 x64 because the icons of RBMenuItem and CBMenuItem are not visible in Nimbus LookAndFeel
- JDK-8346839: [TESTBUG] "java/awt/textfield/setechochartest4/setechochartest4.java" failed because the test frame disappears on clicking "Click Several Times" button
- JDK-8346884: Add since checker test to jdk.editpad
- JDK-8346952: GetGraphicsStressTest.java fails: Native resources unavailable
- JDK-8347277: java/awt/Focus/ComponentLostFocusTest.java fails intermittently
- JDK-8349188: LineBorder does not scale correctly
- JDK-8350621: Code cache stops scheduling GC
- JDK-8351487: [ubsan] jvmti.h runtime error: load of value which is not a valid value
- JDK-8352016: Improve java/lang/RuntimeTests/RuntimeExitLogTest.java
- JDK-8354348: Enable Extended EVEX to REX2/REX demotion for commutative operations with same dst and src2
- JDK-8354415: [Ubuntu25.04] api/java_awt/GraphicsDevice/indexTGF.html#SetDisplayMode - setDisplayMode_REFRESH_RATE_UNKNOWN fails: Height is different on vnc
- JDK-8354447: Missing test for retroactive @SuppressWarnings("dangling-doc-comments") behavior
- JDK-8354646: java.awt.TextField allows to identify the spaces in a password when double clicked at the starting and end of the text
- JDK-8355478: DoubleActionESC.java fails intermittently
- JDK-8356324: JVM crash (SIGSEGV at ClassListParser::resolve_indy_impl) during -Xshare:dump starting from 21.0.5
- JDK-8356897: Update NSS library to 3.111
- JDK-8357064: cds/appcds/ArchiveRelocationTest.java failed with missing expected output
- JDK-8357141: Update to use jtreg 7.5.2
- JDK-8357382: runtime/cds/appcds/aotClassLinking/BulkLoaderTest.java#aot fails with Xcomp and C1
- JDK-8357396: Refactor nmethod::make_not_entrant to use Enum instead of "const char*"
- JDK-8357691: File blocked.certs contains bad content when boot jdk 25 is used, sun/security/lib/CheckBlockedCerts.java failing
- JDK-8357694: RISC-V: Several IR verification tests fail when vlen=128
- JDK-8357799: Improve instructions for JFileChooser/HTMLFileName.java
- JDK-8357816: Add test from JDK-8350576
- JDK-8357822: C2: Multiple string optimization tests are no longer testing string concatenation optimizations
- JDK-8357959: (bf) ByteBuffer.allocateDirect initialization can result in large TTSP spikes
- JDK-8358048: java/net/httpclient/HttpsTunnelAuthTest.java incorrectly calls Thread::stop
- JDK-8358340: Support CDS heap archive with Generational Shenandoah
- JDK-8358532: JFileChooser in GTK L&F still displays HTML filename
- JDK-8358535: Changes in ClassValue (JDK-8351996) caused a 1-9% regression in Renaissance-PageRank
- JDK-8358556: Assert when running with -XX:-UseLibmIntrinsic
- JDK-8358685: [TEST] AOTLoggingTag.java failed with missing log message
- JDK-8358697: TextLayout/MyanmarTextTest.java passes if no Myanmar font is found
- JDK-8358723: jpackage signing issues: the main launcher doesn't have entitlements
- JDK-8358748: Large page size initialization fails with assert "page_size must be a power of 2"
- JDK-8358751: C2: Recursive inlining check for compiled lambda forms is broken
- JDK-8358813: JPasswordField identifies spaces in password via delete shortcuts
- JDK-8359061: Update and ProblemList manual test java/awt/Cursor/CursorDragTest/ListDragCursor.java
- JDK-8359104: gc/TestAlwaysPreTouchBehavior.java#<gcname> fails on Linux
- JDK-8359105: RISC-V: No need for acquire fence in safepoint poll during JNI calls
- JDK-8359127: Amend java/nio/channels/DatagramChannel/PromiscuousIPv6.java to use @requires for OS platform selection
- JDK-8359167: Remove unused test/hotspot/jtreg/vmTestbase/nsk/share/jpda/BindServer.java
- JDK-8359207: Remove runtime/signal/TestSigusr2.java since it is always skipped
- JDK-8359423: Improve error message in case of missing jsa shared archive
- JDK-8359428: Test 'javax/swing/JTabbedPane/bug4499556.java' failed because after selecting one of L&F items, the test case automatically failed when clicking on L&F Menu button again
- JDK-8359449: [TEST] open/test/jdk/java/io/File/SymLinks.java Refactor extract method for Windows specific test
- JDK-8359477: com/sun/net/httpserver/Test12.java appears to have a temp file race
- JDK-8359501: Enhance Handling of URIs
- JDK-8359687: Use PassFailJFrame for java/awt/print/Dialog/DialogType.java
- JDK-8359690: New test TestCPUTimeSampleThrottling still fails intermittently
- JDK-8359735: [Ubuntu 25.10] java/lang/ProcessBuilder/Basic.java, java/lang/ProcessHandle/InfoTest.java fail due to rust-coreutils
- JDK-8359827: Test runtime/Thread/ThreadCountLimit.java need loop increasing the limit
- JDK-8360022: ClassRefDupInConstantPoolTest.java fails when running in repeat
- JDK-8360090: [TEST] RISC-V: disable some cds tests on qemu
- JDK-8360178: TestArguments.atojulong gtest has incorrect format string
- JDK-8360219: [AIX] assert(locals_base >= l2) failed: bad placement
- JDK-8360255: runtime/jni/checked/TestLargeUTF8Length.java fails with -XX:-CompactStrings
- JDK-8360408: [TEST] Use @requires tag instead of exiting based on "os.name" property value for sun/net/www/protocol/file/FileURLTest.java
- JDK-8360411: [TEST] open/test/jdk/java/io/File/MaxPathLength.java Refactor extract method to encapsulate Windows specific test logic
- JDK-8360518: Docker tests do not work when asan is configured
- JDK-8360520: RISC-V: C1: Fix primitive array clone intrinsic regression after JDK-8333154
- JDK-8360664: Null pointer dereference in src/hotspot/share/prims/jvmtiTagMap.cpp in IterateOverHeapObjectClosure::do_object()
- JDK-8360783: CTW: Skip deoptimization between tiers
- JDK-8360791: [ubsan] Adjust signal handling
- JDK-8360867: CTW: Disable inline cache verification
- JDK-8360981: Remove use of Thread.stop in test/jdk/java/net/Socket/DeadlockTest.java
- JDK-8361112: Use exact float -> Float16 conversion method in Float16 tests
- JDK-8361180: Disable CompiledDirectCall verification with -VerifyInlineCaches
- JDK-8361198: [AIX] fix misleading error output in thread_cpu_time_unchecked
- JDK-8361211: C2: Final graph reshaping generates unencodeable klass constants
- JDK-8361215: Add AOT test case: verification constraint classes are excluded
- JDK-8361253: CommandLineOptionTest library should report observed values on failure
- JDK-8361255: CTW: Tolerate more NCDFE problems
- JDK-8361298: SwingUtilities/bug4967768.java fails where character P is not underline
- JDK-8361314: Test serviceability/jvmti/VMEvent/MyPackage/VMEventRecursionTest.java FATAL ERROR in native method: Failed during the GetClassSignature call
- JDK-8361367: AOT ExcludedClasses.java test failed with missing constant pool logs
- JDK-8361423: Add IPSupport::printPlatformSupport to java/net/NetworkInterface/IPv4Only.java
- JDK-8361449: RISC-V: Code cleanup for native call
- JDK-8361478: GHA: Use MSYS2 from GHA runners
- JDK-8361494: [IR Framework] Escape too much in replacement of placeholder
- JDK-8361497: Scoped Values: orElse and orElseThrow do not access the cache
- JDK-8361504: RISC-V: Make C1 clone intrinsic platform guard more specific
- JDK-8361520: Stabilize SystemGC benchmarks
- JDK-8361599: [PPC64] enable missing tests via jtreg requires
- JDK-8361711: Add library name configurability to PKCS11Test.java
- JDK-8361748: Enforce limits on the size of an XBM image
- JDK-8361839: Problemlist BogusFocusableWindowState due to failures in the CI pipeline
- JDK-8361868: [GCC static analyzer] complains about missing calloc - NULL checks in p11_util.c
- JDK-8361871: [GCC static analyzer] complains about use of uninitialized value ckpObject in p11_util.c
- JDK-8361888: [GCC static analyzer] ProcessImpl_md.c Java_java_lang_ProcessImpl_forkAndExec error: use of uninitialized value '*(ChildStuff *)p.mode
- JDK-8361892: AArch64: Incorrect matching rule leading to improper oop instruction encoding
- JDK-8361897: gc/z/TestUncommit.java fails with Uncommitted too slow
- JDK-8361948: Shenandoah: region free capacity unit mismatch
- JDK-8361950: Update to use jtreg 8
- JDK-8361959: [GCC static analyzer] java_props_md.c leak of 'temp' variable is reported
- JDK-8362107: Update the Jan CPU26_01 release date in master branch after forking Oct CPU25_10
- JDK-8362123: ClassLoader Leak via Executors.newSingleThreadExecutor(...)
- JDK-8362169: Pointer passed to upcall may get wrong scope
- JDK-8362204: test/jdk/sun/awt/font/TestDevTransform.java fails on Ubuntu 24.04
- JDK-8362207: Add more test cases for possible double-rounding in fma
- JDK-8362282: runtime/logging/StressAsyncUL.java failed with exitValue = 134
- JDK-8362308: Enhance Bitmap operations
- JDK-8362379: Test serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java should mark as /native
- JDK-8362390: AIX make fails in awt_GraphicsEnv.c
- JDK-8362482: [TESTBUG] serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java: System.gc() does not provide full GC
- JDK-8362501: Update test/hotspot/jtreg/applications/jcstress/README
- JDK-8362515: RISC-V: cleanup NativeFarCall
- JDK-8362516: Support of GCC static analyzer (-fanalyzer)
- JDK-8362530: VM crash with -XX:+PrintTieredEvents when collecting AOT profiling
- JDK-8362532: Test gc/g1/plab/* duplicate command-line options
- JDK-8362533: Tests sun/management/jmxremote/bootstrap/* duplicate VM flags
- JDK-8362581: Timeouts in java/nio/channels/SocketChannel/OpenLeak.java on UNIX
- JDK-8362582: GHA: Increase bundle retention time to deal with infra overload better
- JDK-8362596: RISC-V: Improve _vectorizedHashCode intrinsic
- JDK-8362602: Add test.timeout.factor to CompileFactory to avoid test timeouts
- JDK-8362632: Improve HttpServer Request handling
- JDK-8362834: Several runtime/Thread tests should mark as /native
- JDK-8362836: JFR: Broken pipe in jdk/jfr/event/io/TestIOTopFrame.java
- JDK-8362838: RISC-V: Incorrect matching rule leading to improper oop instruction encoding
- JDK-8362855: Test java/net/ipv6tests/TcpTest.java should report SkippedException when there no ia4addr or ia6addr
- JDK-8362889: [GCC static analyzer] leak in libstringPlatformChars.c
- JDK-8362972: C2 fails with unexpected node in SuperWord truncation: IsFiniteF, IsFiniteD
- JDK-8363676: [GCC static analyzer] missing return value check of malloc in OGLContext_SetTransform
- JDK-8363696: Update the release version and date for OpenJDK 25u
- JDK-8363720: Follow up to JDK-8360411 with post review comments
- JDK-8363895: Minimal build fails with slowdebug builds after JDK-8354887
- JDK-8363898: RISC-V: TestRangeCheckHoistingScaledIV.java fails after JDK-8355293 when running without RVV
- JDK-8363910: Avoid tuning for Power10 CPUs on Linux ppc64le when gcc < 10 is used
- JDK-8363928: Specifying AOTCacheOutput with a blank path causes the JVM to crash
- JDK-8363965: GHA: Switch cross-compiling sysroots to Debian bookworm
- JDK-8363966: GHA: Switch cross-compiling sysroots to Debian trixie
- JDK-8364090: Dump JFR recording on CrashOnOutOfMemoryError
- JDK-8364111: InstanceMirrorKlass iterators should handle CDS and hidden classes consistently
- JDK-8364114: Test TestHugePageDecisionsAtVMStartup.java#LP_enabled fails when no free hugepage
- JDK-8364120: RISC-V: unify the usage of MacroAssembler::instruction_size
- JDK-8364150: RISC-V: Leftover for JDK-8343430 removing old trampoline call
- JDK-8364177: JDK fails to build due to undefined symbol in libpng on LoongArch64
- JDK-8364184: [REDO] AArch64: [VectorAPI] sve vector math operations are not supported after JDK-8353217
- JDK-8364190: JFR: RemoteRecordingStream withers don't work
- JDK-8364198: NMT should have a better corruption message
- JDK-8364199: Enhance list of environment variables printed in hserr/hsinfo file
- JDK-8364212: Shenandoah: Rework archived objects loading
- JDK-8364214: Enhance polygon data support
- JDK-8364235: Fix for JDK-8361447 breaks the alignment requirements for GuardedMemory
- JDK-8364257: JFR: User-defined events and settings with a one-letter name cannot be configured
- JDK-8364263: HttpClient: Improve encapsulation of ProxyServer
- JDK-8364296: Set IntelJccErratumMitigation flag ergonomically
- JDK-8364352: Some tests fail when using a limited number of pregenerated .jsa CDS archives
- JDK-8364454: ProblemList runtime/cds/DeterministicDump.java on macos for JDK-8363986
- JDK-8364503: gc/g1/TestCodeCacheUnloadDuringConcCycle.java fails because of race printing to stdout
- JDK-8364514: [asan] runtime/jni/checked/TestCharArrayReleasing.java heap-buffer-overflow
- JDK-8364556: JFR: Disable SymbolTableStatistics and StringTableStatistics in default.jfc
- JDK-8364597: Replace THL A29 Limited with Tencent
- JDK-8364611: (process) Child process SIGPIPE signal disposition should be default
- JDK-8364660: ClassVerifier::ends_in_athrow() should be removed
- JDK-8364764: java/nio/channels/vthread/BlockingChannelOps.java subtests timed out
- JDK-8364786: Test java/net/vthread/HttpALot.java intermittently fails - 24999 handled, expected 25000
- JDK-8364984: Many jpackage tests are failing on Linux after JDK-8334238
- JDK-8364993: JFR: Disable jdk.ModuleExport in default.jfc
- JDK-8364996: java/awt/font/FontNames/LocaleFamilyNames.java times out on Windows
- JDK-8365058: Enhance CopyOnWriteArraySet
- JDK-8365071: ARM32: JFR intrinsic jvm_commit triggers C2 regalloc assert
- JDK-8365086: CookieStore.getURIs() and get(URI) should return an immutable List
- JDK-8365165: Zap C-heap memory at delete/free
- JDK-8365166: ARM32: missing os::fetch_bcp_from_context implementation
- JDK-8365168: Use 64-bit aligned addresses for CK_ULONG access in PKCS11 native key code
- JDK-8365200: RISC-V: compiler/loopopts/superword/TestGeneralizedReductions.java fails with Zvbb and vlen=128
- JDK-8365206: RISC-V: compiler/c2/irTests/TestFloat16ScalarOperations.java is failing on riscv64
- JDK-8365240: [asan] exclude some tests when using asan enabled binaries
- JDK-8365260: Problemlist 1 test due to failures in the CI pipeline
- JDK-8365265: x86 short forward jump exceeds 8-bit offset in methodHandles_x86.cpp when using Intel APX
- JDK-8365271: Improve Swing supports
- JDK-8365280: Enhance JOptionPane
- JDK-8365302: RISC-V: compiler/loopopts/superword/TestAlignVector.java fails when vlen=128
- JDK-8365307: AIX make fails after JDK-8364611
- JDK-8365312: GCC 12 cannot compile SVE on aarch64 with auto-var-init pattern
- JDK-8365389: Remove static color fields from SwingUtilities3 and WindowsMenuItemUI
- JDK-8365425: [macos26] javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java fails on macOS 26
- JDK-8365442: [asan] runtime/ErrorHandling/CreateCoredumpOnCrash.java fails
- JDK-8365468: EagerJVMCI should only apply to the CompilerBroker JVMCI runtime
- JDK-8365487: [asan] some oops (mode) related tests fail
- JDK-8365543: UnixNativeDispatcher.init should lookup open64at and stat64at on AIX
- JDK-8365571: GenShen: PLAB promotions may remain disabled for evacuation threads
- JDK-8365615: Improve JMenuBar/RightLeftOrientation.java
- JDK-8365638: JFR: Add --exact for debugging out-of-order events
- JDK-8365660: test/jdk/sun/security/pkcs11/KeyAgreement/ tests skipped without SkipExceprion
- JDK-8365700: Jar --validate without any --file option leaves around a temporary file /tmp/tmpJar<number>.jar
- JDK-8365726: Test crashed with assert in C1 thread: Possible safepoint reached by thread that does not allow it
- JDK-8365772: RISC-V: correctly prereserve NaN payload when converting from float to float16 in vector way
- JDK-8365790: Shutdown hook for application image does not work on Windows
- JDK-8365811: test/jdk/java/net/CookieHandler/B6644726.java failure - "Should have 5 cookies. Got only 4, expires probably didn't parse correctly"
- JDK-8365823: Revert storing abstract and interface Klasses to non-class metaspace
- JDK-8365834: Mark java/net/httpclient/ManyRequests.java as intermittent
- JDK-8365841: RISC-V: Several IR verification tests fail after JDK-8350960 without Zvfh
- JDK-8365844: RISC-V: TestBadFormat.java fails when running without RVV
- JDK-8365863: /test/jdk/sun/security/pkcs11/Cipher tests skip without SkippedException
- JDK-8365913: Support latest MSC_VER in abstract_vm_version.cpp
- JDK-8365919: Replace currentTimeMillis with nanoTime in Stresser.java
- JDK-8365926: RISC-V: Performance regression in renaissance (chi-square)
- JDK-8365956: GenShen: Adaptive tenuring threshold algorithm may raise threshold prematurely
- JDK-8365983: Tests should throw SkippedException when SCTP not supported
- JDK-8366028: MethodType::fromMethodDescriptorString should not throw UnsupportedOperationException for invalid descriptors
- JDK-8366029: Do not add -XX:VerifyArchivedFields by default to CDS tests
- JDK-8366031: Mark com/sun/nio/sctp/SctpChannel/CloseDescriptors.java as intermittent
- JDK-8366075: Problemlist 2 tests due to failures in the CI pipeline
- JDK-8366092: [GCC static analyzer] UnixOperatingSystem.c warning: use of uninitialized value 'systemTicks'
- JDK-8366147: ZGC: ZPageAllocator::cleanup_failed_commit_single_partition may leak memory
- JDK-8366159: SkippedException is treated as a pass for pkcs11/KeyStore, pkcs11/SecretKeyFactory and pkcs11/SecureRandom
- JDK-8366208: Unexpected exception in sun.java2d.cmm.lcms.LCMSImageLayout
- JDK-8366229: runtime/Thread/TooSmallStackSize.java runs with all collectors
- JDK-8366250: Problemlist 3 tests due to failures in the CI pipeline
- JDK-8366340: Problemlist 1 test due to failures in the CI pipeline
- JDK-8366342: Key generator and key pair generator tests skipping, but showing as passed
- JDK-8366359: Test should throw SkippedException when there is no lpstat
- JDK-8366365: [test] test/lib-test/jdk/test/whitebox/CPUInfoTest.java should be updated
- JDK-8366434: THP not working properly with G1 after JDK-8345655
- JDK-8366446: Test java/awt/geom/ConcurrentDrawPolygonTest.java fails intermittently
- JDK-8366537: Test "java/util/TimeZone/DefaultTimeZoneTest.java" is not updating the zone ID as expected
- JDK-8366558: Gtests leave /tmp/cgroups-test* files
- JDK-8366694: Test JdbStopInNotificationThreadTest.java timed out after 60 second
- JDK-8366750: Remove test 'java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java' from problemlist
- JDK-8366764: Deproblemlist java/awt/ScrollPane/ScrollPositionTest.java
- JDK-8366800: Problemlist 1 test due to failures in the CI pipeline
- JDK-8366844: Update and automate MouseDraggedOriginatedByScrollBarTest.java
- JDK-8366850: Test com/sun/jdi/JdbStopInNotificationThreadTest.java failed
- JDK-8366893: java/lang/Thread/virtual/stress/GetStackTraceALotWhenPinned.java timed out on macos-aarch64
- JDK-8366948: AOT cache creation crashes when iterating training data
- JDK-8366980: TestTransparentHugePagesHeap.java fails when run with -UseCompressedOops
- JDK-8367017: Remove legacy checks from WrappedToolkitTest and convert from bash
- JDK-8367021: Regression in LocaleDataTest refactoring
- JDK-8367048: RISC-V: Correct pipeline descriptions of the architecture
- JDK-8367066: RISC-V: refine register selection in MacroAssembler:: decode_klass_not_null
- JDK-8367098: RISC-V: sync CPU features with related JVM flags for dependant ones
- JDK-8367131: Test com/sun/jdi/ThreadMemoryLeakTest.java fails on 32 bits
- JDK-8367133: DTLS: fragmentation of Finished message results in handshake failure
- JDK-8367137: RISC-V: Detect Zicboz block size via hwprobe
- JDK-8367237: Thread-Safety Usage Warning for java.text.Collator Classes
- JDK-8367277: Fix copyright header in JMXInterfaceBindingTest.java
- JDK-8367313: CTW: Execute in AWT headless mode
- JDK-8367333: C2: Vector math operation intrinsification failure
- JDK-8367348: Enhance PassFailJFrame to support links in HTML
- JDK-8367378: GenShen: Missing timing stats when old mark buffers are flushed during final update refs
- JDK-8367384: The ICC_Profile class may throw exceptions during serialization
- JDK-8367598: Switch to CRC32C for SEED calculation in jdk.test.lib.Utils
- JDK-8367616: RISC-V: Auto-enable Zicboz extension for debug builds
- JDK-8367689: Revert removal of several compilation-related vmStructs fields
- JDK-8367692: RISC-V: Align post call nop
- JDK-8367694: Fix jtreg test failure when Intel APX is enabled for KNL platforms
- JDK-8367780: Enable UseAPX on Intel CPUs only when both APX_F and APX_NCI_NDD_NF cpuid features are present
- JDK-8367782: VerifyJarEntryName.java: Fix modifyJarEntryName to operate on bytes and re-introduce verifySignatureEntryName
- JDK-8367869: Test java/io/FileDescriptor/Sync.java timed out
- JDK-8367904: Test java/net/InetAddress/ptr/Lookup.java should throw SkippedException
- JDK-8367948: JFR: MethodTrace threshold setting has no effect
- JDK-8367953: JFR sampler threads does not appear in thread dump
- JDK-8367969: C2: compiler/vectorapi/TestVectorMathLib.java fails without UnlockDiagnosticVMOptions
- JDK-8367988: NewFileSystemTests.readOnlyZipFileFailure fails when run by root user
- JDK-8368032: Enhance Certificate Checking
- JDK-8368071: Compilation throughput regressed 2X-8X after JDK-8355003
- JDK-8368152: Shenandoah: Incorrect behavior at end of degenerated cycle
- JDK-8368192: Test java/lang/ProcessBuilder/Basic.java#id0 fails with Exception: Stack trace
- JDK-8368366: RISC-V: AlignVector is mistakenly set to AvoidUnalignedAccesses
- JDK-8368367: Test jdk/jfr/event/gc/detailed/TestGCHeapMemoryUsageEvent.java fails jdk.GCHeapMemoryUsage "expected 0 > 0"
- JDK-8368565: Adjust comment regarding dependency of libjvm.so to librt
- JDK-8368606: Printer lookup returns empty on AIX platform due to uninitialized results list
- JDK-8368668: Several vmTestbase/vm/gc/compact tests timed out on large memory machine
- JDK-8368670: Deadlock in JFR on event register + class load
- JDK-8368698: runtime/cds/appcds/aotCache/OldClassSupport.java assert(can_add()) failed: Cannot add TrainingData objects
- JDK-8368732: RISC-V: Detect support for misaligned vector access via hwprobe
- JDK-8368890: open/test/jdk/tools/jpackage/macosx/NameWithSpaceTest.java fails randomly
- JDK-8368893: RISC-V: crash after JDK-8352673 on fastdebug version
- JDK-8368960: Adjust java UL logging in the build
- JDK-8368982: Test sun/security/tools/jarsigner/EC.java completed and timed out
- JDK-8369078: Fix faulty test conversion in IllegalCharsetName.java
- JDK-8369184: SimpleTimeZone equals() Returns True for Unequal Instances with Different hashCode Values
- JDK-8369190: JavaFrameAnchor on AArch64 has unnecessary barriers and wrong store order in MacroAssembler
- JDK-8369226: GHA: Switch to MacOS 15
- JDK-8369319: java/net/httpclient/CancelRequestTest.java fails intermittently
- JDK-8369450: [Ubuntu 25.10] openjdk fails to build due to rust-coreutils date
- JDK-8369487: Revert EA option for build promotion
- JDK-8369506: Bytecode rewriting causes Java heap corruption on AArch64
- JDK-8369560: Slowdebug build without CDS fails
- JDK-8369563: Gtest dll_address_to_function_and_library_name has issues with stripped pdb files
- JDK-8369616: JavaFrameAnchor on RISC-V has unnecessary barriers and wrong store order in MacroAssembler
- JDK-8369656: Calling CompletableFuture.join() could execute task in common pool
- JDK-8369657: [AIX] TOC overflow in static-launcher build when building slowdebug after JDK-8352064
- JDK-8369853: jpackage signing tests fail after JDK-8358723
- JDK-8369868: Compilation error in Win8365790Test.java with JDK-8358723 fix resulting in CI tier3 failure
- JDK-8369946: Bytecode rewriting causes Java heap corruption on PPC
- JDK-8369947: Bytecode rewriting causes Java heap corruption on RISC-V
- JDK-8369979: Flag UsePopCountInstruction was accidentally disabled on PPC64
- JDK-8370048: Shenandoah: Deprecated ShenandoahPacing option
- JDK-8370049: [s390x] G1 barrier compareAndExchange does not return old value when compareExchange fails
- JDK-8370318: AES-GCM vector intrinsic may read out of bounds (x86_64, AVX-512)
- JDK-8370331: Problemlist 2 tests due to failures in the CI pipeline
- JDK-8370428: Change milestone to fcs for all releases
- JDK-8370465: Right to Left Orientation Issues with MenuItem Component
- JDK-8371094: --mac-signing-key-user-name no longer works
- JDK-8371425: Include folder names in vscode workspace virtual folders
- JDK-8371697: test/jdk/java/nio/file/FileStore/Basic.java fails after 8360887 on linux
- JDK-8372753: jpackage ignores --file-associations option with predefined app image
Notes on individual issues:
===========================
core-libs/java.lang.invoke:
JDK-8358535: Changes in ClassValue (JDK-8351996) caused a 1-9% regression in Renaissance-PageRank
=================================================================================================
Behavioural changes in ClassValue in the original release of OpenJDK
25 (JDK-8351996) caused a noticeable performance regression after use
of ClassValue::remove. The cause of this regression was found to be
the accidental removal of a cache update in ClassValue::readAccess,
leading to ClassValue::get calls taking the slow path rather than
using the cache. In this update, the cache update is restored.
core-svc/javax.management:
JDK-8341496: Improve JMX connections
====================================
With this release of OpenJDK, SSL connections created by
javax.rmi.ssl.SslRMIClientSocketFactory now enable HTTPS-based
endpoint identification by default. This can be disabled by setting
the new system property
jdk.rmi.ssl.client.enableEndpointIdentification to false.
hotspot/gc:
JDK-8366434: THP not working properly with G1 after JDK-8345655
===============================================================
Refactoring of the memory reservation code in the original release of
OpenJDK 25 (JDK-8345655) caused a set page size provided by
`os::vm_page_size()` to always be used rather than a value passed in
by the calling method. As the page size is used by the G1 garbage
collector to determine the alignment of the reservation, this lead to
reservations being ineligible for Transparent Huge Pages (THP). In
this update, the caller specified page size is restored.
security-libs/java.security:
JDK-8368032: Enhance Certificate Checking
=========================================
OpenJDK supports the authorityInfoAccess extension in X.509
certificates when the `com.sun.security.enableAIAcaIssuers` system
property is set to `true`. With this release of OpenJDK, a security
and system property `com.sun.security.allowedAIALocations` is
introduced which acts as a filter on the URIs specified in the
extension. By default, the property is empty, which will cause all
URIs to be denied when the extension is enabled. A value of `any` may
be used to allow all URIs or a whitespace-separated list of filters
may be used for more fine-grained control. The syntax of the filters
is specified in the `java.security` file. A non-empty value for the
system property takes precedence over the security property.
New in release OpenJDK 25.0.1 (2025-10-21):
===========================================
* CVEs
- CVE-2025-53057
- CVE-2025-53066
- CVE-2025-61748
* Changes
- JDK-8315131: Clarify VarHandle set/get access on 32-bit platforms
- JDK-8352637: Enhance bytecode verification
- JDK-8356294: Enhance Path Factories
- JDK-8356587: Missing object ID X in pool jdk.types.Method
- JDK-8357826: Avoid running some jtreg tests when asan is configured
- JDK-8358452: JNI exception pending in Java_sun_awt_screencast_ScreencastHelper_remoteDesktopKeyImpl of screencast_pipewire.c:1214 (ID: 51119)
- JDK-8358577: Test serviceability/jvmti/thread/GetCurrentContendedMonitor/contmon01/contmon01.java failed: unexpexcted monitor object
- JDK-8358819: The first year is not displayed correctly in Japanese Calendar
- JDK-8359059: Bump version numbers for 25.0.1
- JDK-8359218: RISC-V: Only enable CRC32 intrinsic when AvoidUnalignedAccess == false
- JDK-8359270: C2: alignment check should consider base offset when emitting arraycopy runtime call
- JDK-8359454: Enhance String handling
- JDK-8359596: Behavior change when both -Xlint:options and -Xlint:-options flags are given
- JDK-8360179: RISC-V: Only enable BigInteger intrinsics when AvoidUnalignedAccess == false
- JDK-8360533: ContainerRuntimeVersionTestUtils fromVersionString fails with some docker versions
- JDK-8360647: [XWayland] [OL10] NumPad keys are not triggered
- JDK-8360679: Shenandoah: AOT saved adapter calls into broken GC barrier stub
- JDK-8360937: Enhance certificate handling
- JDK-8361212: Remove AffirmTrust root CAs
- JDK-8361532: RISC-V: Several vector tests fail after JDK-8354383
- JDK-8361829: [TESTBUG] RISC-V: compiler/vectorization/runner/BasicIntOpTest.java fails with RVV but not Zvbb
- JDK-8362109: Change milestone to fcs for all releases
- JDK-8362882: Update SubmissionPublisher() specification to reflect use of ForkJoinPool.asyncCommonPool()
- JDK-8366223: ZGC: ZPageAllocator::cleanup_failed_commit_multi_partition is broken
- JDK-8367031: [backout] Change java.time month/day field types to 'byte'
- JDK-8368308: ISO 4217 Amendment 180 Update
Notes on individual issues:
===========================
core-libs/java.io:serialization:
JDK-8367031: [backout] Change java.time month/day field types to 'byte'
=======================================================================
In the initial release of OpenJDK 25, attempting to read serialised
Class objects created by earlier versions of OpenJDK for several of
the `java.time` classes would fail with a
`InvalidClassException`. Similarly, `java.time` Class objects
serialised with OpenJDK 25 could not be read by older OpenJDK
versions. This was due to the type of the day and month fields in
these classes being changed to `byte`. This change has now been
reverted and compatibility between OpenJDK 25 and older versions
restored.
Note that this incompatibility occurred with the `Class` object and
not an instance of the object i.e. `writeObject(LocalDate.class)`
would produce incompatible serialised data, but
`writeObject(LocalDate.now())` would not.
security-libs/java.security:
JDK-8361212: Remove AffirmTrust root CAs
========================================
The following root certificates from AffirmTrust, which were
deactivated in the 21.0.5 release of October 2024, have been removed
from the `cacerts` keystore:
Alias name: affirmtrustcommercialca [jdk]
CN=AffirmTrust Commercial
O=AffirmTrust
C=US
SHA256: 03:76:AB:1D:54:C5:F9:80:3C:E4:B2:E2:01:A0:EE:7E:EF:7B:57:B6:36:E8:A9:3C:9B:8D:48:60:C9:6F:5F:A7
Alias name: affirmtrustnetworkingca [jdk]
CN=AffirmTrust Networking
O=AffirmTrust
C=US
SHA256: 0A:81:EC:5A:92:97:77:F1:45:90:4A:F3:8D:5D:50:9F:66:B5:E2:C5:8F:CD:B5:31:05:8B:0E:17:F3:F0B4:1B
Alias name: affirmtrustpremiumca [jdk]
CN=AffirmTrust Premium
O=AffirmTrust
C=US
SHA256: 70:A7:3F:7F:37:6B:60:07:42:48:90:45:34:B1:14:82:D5:BF:0E:69:8E:CC:49:8D:F5:25:77:EB:F2:E9:3B:9A
Alias name: affirmtrustpremiumeccca [jdk]
CN=AffirmTrust Premium ECC
O=AffirmTrust
C=US
SHA256: BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23
New in release OpenJDK 25.0.0 (2025-09-16):
===========================================
Major changes are listed below. Some changes may have been backported
to earlier releases following their first appearance in OpenJDK 22
through to 25.
NEW FEATURES
============
Language Features
=================
Flexible Constructor Bodies
============================
https://openjdk.org/jeps/447
https://openjdk.org/jeps/482
https://openjdk.org/jeps/492
https://openjdk.org/jeps/513
In constructors in the Java programming language, allow statements to
appear before an explicit constructor invocation, i.e., super(..) or
this(..). The statements cannot reference the instance under
construction, but they can initialize its fields. Initializing fields
before invoking another constructor makes a class more reliable when
methods are overridden.
This language feature is now finalised (JEP 513). It was first
introduced as a preview language feature
(http://openjdk.java.net/jeps/12) in OpenJDK 22 (JEP 447) under the
name "Statements before super(...)". It reached a second preview in
OpenJDK 23 (JEP 482) with the addition of allowing fields to be
initialized before invoking another constructor. It reached a third
preview in OpenJDK 24 (JEP 492).
Unnamed Patterns and Variables
==============================
https://openjdk.org/jeps/443
https://openjdk.org/jeps/456
Enhance the Java language with unnamed patterns, which match a record
component without stating the component's name or type, and unnamed
variables, which can be initialized but not used. Both are denoted by
an underscore character, _.
This feature is now finalised (JEP 456). It was a preview feature
(http://openjdk.java.net/jeps/12) in OpenJDK 21 (JEP 443).
Primitive Types in Patterns, instanceof, and switch
===================================================
https://openjdk.org/jeps/455
https://openjdk.org/jeps/488
https://openjdk.org/jeps/507
Enhance pattern matching by allowing primitive type patterns in all
pattern contexts, and extend instanceof and switch to work with all
primitive types.
This is a preview language feature (http://openjdk.java.net/jeps/12)
introduced in OpenJDK 23 (JEP 455) with a second preview in OpenJDK 24
(JEP 488) and reaching a third in OpenJDK 25 (JEP 507).
Module Import Declarations
==========================
https://openjdk.org/jeps/476
https://openjdk.org/jeps/494
https://openjdk.org/jeps/511
Enhance the Java programming language with the ability to succinctly
import all of the packages exported by a module. This simplifies the
reuse of modular libraries, but does not require the importing code to
be in a module itself.
This language feature is now finalised (JEP 511). It was introduced as
a preview language feature (http://openjdk.java.net/jeps/12) in
OpenJDK 23 (JEP 476) and had a second preview in OpenJDK 24 (JEP 494).
Library Features
================
Foreign Function & Memory API
=============================
https://openjdk.org/jeps/412
https://openjdk.org/jeps/419
https://openjdk.org/jeps/424
https://openjdk.org/jeps/434
https://openjdk.org/jeps/442
https://openjdk.org/jeps/454
Introduce an API by which Java programs can interoperate with code and
data outside of the Java runtime. By efficiently invoking foreign
functions (i.e., code outside the JVM), and by safely accessing
foreign memory (i.e., memory not managed by the JVM), the API enables
Java programs to call native libraries and process native data without
the brittleness and danger of JNI.
This API is now finalised (JEP 454). It was first introduced in
incubation (https://openjdk.java.net/jeps/11) in OpenJDK 17 (JEP 412),
and is an evolution of the Foreign Memory Access API (OpenJDK 14
through 16) and Foreign Linker API (OpenJDK 16) (see release notes for
java-17-openjdk). OpenJDK 18 saw a second round of incubation (JEP
419) before its inclusion as a preview feature
(http://openjdk.java.net/jeps/12) in OpenJDK 19 (JEP 424). A second
preview took place in OpenJDK 20 (JEP 434) and a third and final
preview in OpenJDK 21 (JEP 442).
Prepare to Restrict the Use of JNI
==================================
https://openjdk.org/jeps/472
Issue warnings about uses of the Java Native Interface (JNI) and
adjust the Foreign Function & Memory (FFM) API to issue warnings in a
consistent manner. All such warnings aim to prepare developers for a
future release that ensures integrity by default by uniformly
restricting JNI and the FFM API. Application developers can avoid both
current warnings and future restrictions by selectively enabling these
interfaces where essential using the --enable-native-access
command-line option.
Class-File API
==============
https://openjdk.org/jeps/457
https://openjdk.org/jeps/466
https://openjdk.org/jeps/484
Provide a standard API for parsing, generating, and transforming Java
class files.
This API is now finalised (JEP 484). It was introduced as a preview
library feature (http://openjdk.java.net/jeps/12) in OpenJDK 22 (JEP
457) with a second preview in OpenJDK 23 (JEP 466).
Vector API
==========
https://openjdk.org/jeps/338
https://openjdk.org/jeps/414
https://openjdk.org/jeps/417
https://openjdk.org/jeps/426
https://openjdk.org/jeps/438
https://openjdk.org/jeps/448
https://openjdk.org/jeps/460
https://openjdk.org/jeps/469
https://openjdk.org/jeps/489
https://openjdk.org/jeps/508
Introduce an API to express vector computations that reliably compile
at runtime to optimal vector hardware instructions on supported CPU
architectures and thus achieve superior performance to equivalent
scalar computations.
This is an incubation feature (https://openjdk.java.net/jeps/11)
introduced in OpenJDK 16 (JEP 338). A second round of incubation took
place in OpenJDK 17 (JEP 414), OpenJDK 18 (JEP 417) saw a third,
OpenJDK 19 a fourth (JEP 426), OpenJDK 20 (JEP 438) a fifth, OpenJDK
21 a sixth (JEP 448), OpenJDK 22 a seventh (JEP 460), OpenJDK 23 an
eighth (JEP 469), OpenJDK 24 a ninth (JEP 489) and it reaches its
tenth in OpenJDK 25 (JEP 508).
Stream Gatherers
================
https://openjdk.org/jeps/461
https://openjdk.org/jeps/473
https://openjdk.org/jeps/485
Enhance the Stream API to support custom intermediate operations. This
will allow stream pipelines to transform data in ways that are not
easily achievable with the existing built-in intermediate operations.
This API is now finalised (JEP 485). It was introduced as a preview
library feature (http://openjdk.java.net/jeps/12) in OpenJDK 22 (JEP
461) with a second preview in OpenJDK 23 (JEP 473).
Structured Concurrency
======================
https://openjdk.org/jeps/428
https://openjdk.org/jeps/437
https://openjdk.org/jeps/453
https://openjdk.org/jeps/462
https://openjdk.org/jeps/480
https://openjdk.org/jeps/499
https://openjdk.org/jeps/505
Simplify multithreaded programming by introducing an API for
structured concurrency. Structured concurrency treats multiple tasks
running in different threads as a single unit of work, thereby
streamlining error handling and cancellation, improving reliability,
and enhancing observability.
This API was first introduced in incubation
(https://openjdk.java.net/jeps/11) in OpenJDK 19 (JEP 428) and had a
second round of incubation in OpenJDK 20 (JEP 437). It became a
preview feature (http://openjdk.java.net/jeps/12) in OpenJDK 21 (JEP
453), reached its second preview in OpenJDK 22 (JEP 462), had a third
preview in OpenJDK 23 (JEP 480), a fourth in OpenJDK 24 (JEP 499) and
reaches its fifth in OpenJDK 25 (JEP 505).
Compact Source Files and Instance Main Methods
==============================================
https://openjdk.org/jeps/445
https://openjdk.org/jeps/463
https://openjdk.org/jeps/477
https://openjdk.org/jeps/495
https://openjdk.org/jeps/512
Evolve the Java programming language so that beginners can write their
first programs without needing to understand language features
designed for large programs. Far from using a separate dialect of the
language, beginners can write streamlined declarations for
single-class programs and then seamlessly expand their programs to use
more advanced features as their skills grow. Experienced developers
can likewise enjoy writing small programs succinctly, without the need
for constructs intended for programming in the large.
This library feature is now finalised (JEP 512) with some minor
changes from the last release. It was first introduced as a preview
(http://openjdk.java.net/jeps/12) in OpenJDK 21 (JEP 445) under the
name "Unnamed Classes and Instance Main Methods". It reached a second
preview in OpenJDK 22 (JEP 463) and a third in OpenJDK 23 (JEP 477)
under the new name, "Implicitly Declared Classes and Instance Main
Methods", due to the move away from unnamed classes to an implicitly
declared name chosen by the host system. It had a fourth preview in
OpenJDK 24 (JEP 495) with new terminology and a revised title ("Simple
Source Files and Instance Main Methods"), but otherwise unchanged.
Scoped Values
=============
https://openjdk.org/jeps/429
https://openjdk.org/jeps/446
https://openjdk.org/jeps/464
https://openjdk.org/jeps/481
https://openjdk.org/jeps/487
https://openjdk.org/jeps/506
Introduce scoped values, which enable the sharing of immutable data
within and across threads. They are preferred to thread-local
variables, especially when using large numbers of virtual threads.
This API is now finalised (JEP 506). This API was first introduced in
incubation (https://openjdk.java.net/jeps/11) in OpenJDK 20 (JEP
429). It became a preview feature (http://openjdk.java.net/jeps/12) in
OpenJDK 21 (JEP 446), had a second preview in OpenJDK 22 (JEP 464), a
third in OpenJDK 23 (JEP 481) and a fourth in OpenJDK 24 (JEP 487).
Key Derivation Function API
===========================
https://openjdk.org/jeps/478
https://openjdk.org/jeps/510
Introduce an API for Key Derivation Functions (KDFs), which are
cryptographic algorithms for deriving additional keys from a secret
key and other data.
This API is now finalised (JEP 510). It was first introduced as a
preview library feature (http://openjdk.java.net/jeps/12) in OpenJDK
24 (JEP 478).
Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
==================================================================
https://openjdk.org/jeps/496
Enhance the security of Java applications by providing an
implementation of the quantum-resistant Module-Lattice-Based
Key-Encapsulation Mechanism (ML-KEM). Key encapsulation mechanisms
(KEMs) are used to secure symmetric keys over insecure communication
channels using public key cryptography. ML-KEM is designed to be
secure against future quantum computing attacks. It has been
standardized by the United States National Institute of Standards and
Technology (NIST) in FIPS 203 [0].
[0] https://csrc.nist.gov/pubs/fips/203/final
Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
==================================================================
https://openjdk.org/jeps/497
Enhance the security of Java applications by providing an
implementation of the quantum-resistant Module-Lattice-Based Digital
Signature Algorithm (ML-DSA). Digital signatures are used to detect
unauthorized modifications to data and to authenticate the identity of
signatories. ML-DSA is designed to be secure against future quantum
computing attacks. It has been standardized by the United States
National Institute of Standards and Technology (NIST) in FIPS 204 [0].
[0] https://csrc.nist.gov/pubs/fips/204/final
PEM Encodings of Cryptographic Objects
======================================
https://openjdk.org/jeps/470
Introduce an API for encoding objects that represent cryptographic
keys, certificates, and certificate revocation lists into the
widely-used Privacy-Enhanced Mail (PEM) transport format, and for
decoding from that format back into objects.
This is a preview library feature (http://openjdk.java.net/jeps/12)
introduced in OpenJDK 25 (JEP 470).
Stable Values
=============
https://openjdk.org/jeps/502
Introduce an API for stable values, which are objects that hold
immutable data. Stable values are treated as constants by the JVM,
enabling the same performance optimizations that are enabled by
declaring a field final. Compared to final fields, however, stable
values offer greater flexibility as to the timing of their
initialization.
This is a preview library feature (http://openjdk.java.net/jeps/12)
introduced in OpenJDK 25 (JEP 502).
Virtual Machine Enhancements
============================
Region Pinning for G1
=====================
https://openjdk.org/jeps/423
Reduce latency by implementing region pinning in G1, so that garbage
collection need not be disabled during Java Native Interface (JNI)
critical regions.
ZGC: Generational Mode by Default
=================================
https://openjdk.org/jeps/439
https://openjdk.org/jeps/474
Switch the default mode of the Z Garbage Collector (ZGC) to the
generational mode. Deprecate the non-generational mode, with the
intent to remove it in a future release.
Late Barrier Expansion for G1
=============================
https://openjdk.org/jeps/475
Simplify the implementation of the G1 garbage collector's barriers,
which record information about application memory accesses, by
shifting their expansion from early in the C2 JIT's compilation
pipeline to later.
Ahead-of-Time Class Loading & Linking
=====================================
https://openjdk.org/jeps/483
https://openjdk.org/jeps/514
Improve startup time by making the classes of an application instantly
available, in a loaded and linked state, when the HotSpot Java Virtual
Machine starts. Achieve this by monitoring the application during one
run and storing the loaded and linked forms of all classes in a cache
for use in subsequent runs. Lay a foundation for future improvements
to both startup and warmup time.
Using this feature requires a two stage process:
1. Create the Ahead-of-Time cache from a training run of the
application using the option `--XX:AOTCacheOutput=<cache name>` where
`<cache name>` is the cache reference to use in later runs.
2. When running the application in testing or production, use the
option `-XX:AOTCache=<cache name>` to run the application with the
cache generated in #2.
Previously, in OpenJDK 24 (JEP 483), the training run and cache
creation were handled by two separate steps:
1. Populate the Ahead-of-Time configuration data with a training run
of the application using the options `-XX:AOTMode=record
-XX:AOTConfiguration=<config name>` where `<config name>` is the
configuration reference to use in #2.
2. Create the Ahead-of-Time cache using the options
`-XX:AOTMode=create -XX:AOTConfiguration=<config name>
-XX:AOTCache=<cache name>` where `<config name>` is the configuration
reference from #1 and `<cache name>` is the cache reference to use in
later runs.
JEP 514 ("Ahead-of-Time Command-Line Ergonomics") in OpenJDK 25 adds
the option `--XX:AOTCacheOutput` which performs both the above steps
from a single command-line invocation using a temporary configuration
file. A new environment variable, `JDK_AOT_VM_OPTIONS`, can be used
to pass options to the cache creation step without affecting the
training run step.
Ahead-of-Time Method Profiling
==============================
https://openjdk.org/jeps/515
Improve warmup time by making method-execution profiles from a
previous run of an application instantly available, when the HotSpot
Java Virtual Machine starts. This will enable the JIT compiler to
generate native code immediately upon application startup, rather than
having to wait for profiles to be collected.
Synchronize Virtual Threads without Pinning
===========================================
https://openjdk.org/jeps/491
Improve the scalability of Java code that uses synchronized methods
and statements by arranging for virtual threads that block in such
constructs to release their underlying platform threads for use by
other virtual threads. This will eliminate nearly all cases of virtual
threads being pinned to platform threads, which severely restricts the
number of virtual threads available to handle an application's
workload.
Compact Object Headers
======================
https://openjdk.org/jeps/450
https://openjdk.org/jeps/519
Reduce the size of object headers in the HotSpot JVM from between 96
and 128 bits down to 64 bits on 64-bit architectures. This will reduce
heap size, improve deployment density, and increase data locality.
This is now a production feature in OpenJDK 25 (JEP 519) enabled using
`-XX:+UseCompactObjectHeaders`. It was first introduced as an
experimental feature (JEP 450) that also required the use of
`-XX:+UnlockExperimentalVMOptions`.
Generational Shenandoah
=======================
https://openjdk.org/jeps/404
https://openjdk.org/jeps/521
Enhance the Shenandoah garbage collector with experimental
generational collection capabilities to improve sustainable
throughput, load-spike resilience, and memory utilization.
This is now a production feature in OpenJDK 25 (JEP 521) enabled using
`-XX:ShenandoahGCMode=generational`. It was first introduced as an
experimental feature (JEP 404) that also required the use of
`-XX:+UnlockExperimentalVMOptions`.
JFR Cooperative Sampling
========================
https://openjdk.org/jeps/518
Improve the stability of the JDK Flight Recorder (JFR) when it
asynchronously samples Java thread stacks. Achieve this by walking
call stacks only at safepoints, while minimizing safepoint bias.
JFR Method Timing & Tracing
===========================
https://openjdk.org/jeps/520
Extend the JDK Flight Recorder (JFR) with facilities for method timing
and tracing via bytecode instrumentation.
JFR CPU-Time Profiling
======================
https://openjdk.org/jeps/509
Enhance the JDK Flight Recorder (JFR) to capture more accurate
CPU-time profiling information on Linux.
This is an experimental feature so its JFR events are tagged with the
`@Experimental` annotation. Unlike other experimental virtual machine
features, it does not need to be explicitly enabled with
`-XX:+UnlockExperimentalVMOptions`.
Tools
=====
Launch Multi-File Source-Code Programs
======================================
https://openjdk.org/jeps/458
Enhance the java application launcher to be able to run a program
supplied as multiple files of Java source code. This will make the
transition from small programs to larger ones more gradual, enabling
developers to choose whether and when to go to the trouble of
configuring a build tool.
Markdown Documentation Comments
===============================
https://openjdk.org/jeps/467
Enable JavaDoc documentation comments to be written in Markdown rather
than solely in a mixture of HTML and JavaDoc @-tags.
Linking Run-Time Images without JMODs
=====================================
https://openjdk.org/jeps/493
Reduce the size of the JDK by approximately 25% by enabling the jlink
tool to create custom run-time images without using the JDK's JMOD
files.
This feature must be enabled when the JDK is built using the
--enable-linkable-runtime option. It will not be enabled by default,
and some JDK vendors may choose not to enable it.
DEPRECATIONS
============
Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
==================================================================
https://openjdk.org/jeps/471
Deprecate the memory-access methods in sun.misc.Unsafe for removal in
a future release. These unsupported methods have been superseded by
standard APIs, namely the VarHandle API (JEP 193, OpenJDK 9) and the
Foreign Function & Memory API (JEP 454, OpenJDK 22). We strongly
encourage library developers to migrate from sun.misc.Unsafe to
supported replacements, so that applications can migrate smoothly to
modern JDK releases.
Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
=========================================================
https://openjdk.org/jeps/498
Issue a warning at run time on the first occasion that any
memory-access method in sun.misc.Unsafe is invoked. All of these
unsupported methods were terminally deprecated in JDK 23 (see JEP 471
above). They have been superseded by standard APIs, namely the
VarHandle API (JEP 193, OpenJDK 9) and the Foreign Function & Memory
API (JEP 454, OpenJDK 22). We strongly encourage library developers to
migrate from sun.misc.Unsafe to supported replacements, so that
applications can migrate smoothly to modern JDK releases.
Permanently Disable the Security Manager
========================================
https://openjdk.org/jeps/486
The Security Manager has not been the primary means of securing
client-side Java code for many years, it has rarely been used to
secure server-side code, and it is costly to maintain. We therefore
deprecated it for removal in OpenJDK 17 via JEP 411 (2021). As the
next step toward removing the Security Manager, we will revise the
Java Platform specification so that developers cannot enable it and
other Platform classes do not refer to it. This change will have no
impact on the vast majority of applications, libraries, and tools. We
will remove the Security Manager API in a future release.
REMOVALS
========
String Templates
================
https://openjdk.org/jeps/430
https://openjdk.org/jeps/459
https://openjdk.org/jeps/465
This was a preview feature (http://openjdk.java.net/jeps/12)
introduced in OpenJDK 21 (JEP 430) with a second preview in OpenJDK 22
(JEP 459). A third preview was proposed but ultimately withdrawn for
OpenJDK 23 (JEP 465) and the feature is no longer present. See [0]
for further explanation.
[0] https://mail.openjdk.org/pipermail/amber-spec-experts/2024-April/004106.html
Remove the Windows & Linux 32-bit x86 Ports
===========================================
https://openjdk.org/jeps/449
https://openjdk.org/jeps/479
https://openjdk.org/jeps/501
https://openjdk.org/jeps/503
Remove the source code and build support for the Windows (JEP 479) &
Linux (JEP 503) 32-bit x86 ports. The Windows port was deprecated for
removal in JDK 21 by JEP 449 and the Linux port was deprecated for
removal in JDK 24 by JEP 501. Both deprecations took place with the
express intent to remove the ports in a future release.
Following this removal of these 32-bit x86 ports, the
architecture-agnostic Zero port is the only way to run Java programs
on 32-bit x86 processors.
ZGC: Remove the Non-Generational Mode
=====================================
https://openjdk.org/jeps/439
https://openjdk.org/jeps/474
https://openjdk.org/jeps/490
Remove the non-generational mode of the Z Garbage Collector (ZGC),
keeping the generational mode as the default for ZGC (see JEP 439 &
474).