The following sections summarize changes made in all Java SE 21.0.4 BPR. Bug fixes and any other changes are listed below in date order, most current BPR first. Note that bug fixes in the previous BPR are also included in the current BPR.
BugId | Category | Subcategory | Summary |
---|---|---|---|
JDK-8336107 (not public) | install | JDK rpm upgrade from 11.0.23 to 11.0.25 leaves "orphan" alternatives entry |
BugId | Category | Subcategory | Summary |
---|---|---|---|
JDK-8322726 | hotspot | compiler | C2: Unloaded signature class kills argument value |
JDK-8331885 | hotspot | compiler | C2: meet between unloaded and speculative types is not symmetric |
Release date: July 16, 2024
The full version string for this update release is 21.0.4+8 (where "+" means "build"). The version number is 21.0.4.
For more information, refer to Timezone Data Versions in the JRE Software.
The security baselines for the Java Runtime at the time of the release of JDK 21.0.4 are specified in the following table:
Java Family Version | Security Baseline (Full Version String) |
---|---|
21 | 21.0.4+8 |
17 | 17.0.12+8 |
11 | 11.0.24+7 |
8 | 8u421-b09 |
Oracle recommends that the JDK is updated with each Critical Patch Update. In order to determine if a release is the latest, the Security Baseline page can be used to determine which is the latest version for each release family.
Critical patch updates, which contain security vulnerability fixes, are announced one year in advance on Critical Patch Updates, Security Alerts and Bulletins. It is not recommended that this JDK (version 21.0.4) be used after the next critical patch update scheduled for October 15, 2024.
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.
-XshowSettings
Launcher Option
(JDK-8281658)
The -XshowSettings
launcher has a new security
category. Settings from security properties, security providers and TLS related settings are displayed with this option. A security sub-category can be passed as an argument to the security category option. See the output from java -X
:
-XshowSettings:security
show all security settings and continue
-XshowSettings:security:*sub-category*
show settings for the specified security sub-category and continue. Possible *sub-category* arguments for this option include:
all: show all security settings and continue
properties: show security properties and continue
providers: show static security provider settings and continue
tls: show TLS related security settings and continue
Third party security provider details will be reported if they are included in the application class path or module path and such providers are configured in the java.security
file.
The Code Root Scan Phase during garbage collection finds references to Java objects in compiled code. To speed up this process, G1 maintains a remembered set for compiled code that contains references into the Java heap. That is, every region contains a set of compiled code that contains references into it.
Assuming that such references are few, previous code used a single thread per region to iterate over a particular region's references, which poses a scalability bottleneck if the distribution of these references is very unbalanced.
G1 now distributes this code root scan work across multiple threads within regions, removing this bottleneck.
During a young collection, ParallelGC partitions the old generation into 64kB stripes when scanning it for references into the young generation. These stripes are assigned to worker threads that do the scanning in parallel as work units.
Before this change, Parallel GC always scanned these stripes completely even if only a small part had been known to contain interesting references. Additionally, every worker thread processed the objects that start in that stripe by itself, including parts of objects that extend into other stripes. This behavior limited parallelism when processing large objects. A single large object, potentially containing thousands of references, had been scanned by a single thread only and in full. This would cause bad scaling due to memory sharing and cache misses in the subsequent long, work stealing phase.
With this change, Parallel GC workers limit work to their stripe and only process interesting parts of large object arrays. This reduces the work done by a single thread for a stripe, improves parallelism, and reduces the amount of work stealing. Parallel GC pauses are now on par with G1 in presence of large object arrays, reducing pause times by 4-5 times in some cases.
jpackage
May Produce an Inaccurate List of Required Packages on Debian Linux Distros
(JDK-8295111)
Fixed an issue on Debian Linux distros where jpackage
could not always build an accurate list of required packages from shared libraries with symbolic links in their paths, causing installations to fail due to missing shared libraries.
Delete nonfunctional desktop integration functionality from Linux installers. The installers will stop depositing files in /usr/share/icons
, /usr/share/mime
, and /usr/share/applications
subtrees.
The following root certificates have been added to the cacerts truststore:
+ GlobalSign
+ globalsignr46
DN: CN=GlobalSign Root R46, O=GlobalSign nv-sa, C=BE
+ GlobalSign
+ globalsigne46
DN: CN=GlobalSign Root E46, O=GlobalSign nv-sa, C=BE
RPATH
Instead of RUNPATH
(JDK-8326891)
Native executables and libraries on Linux have switched to using RPATH
instead of RUNPATH
in this release.
JDK native executables and libraries use embedded runtime search paths to locate other internal JDK native libraries. On Linux these can be defined as either RPATH
or RUNPATH
. The main difference is that the dynamic linker considers RPATH
before the LD_LIBRARY_PATH
environment variable, while RUNPATH
is only considered after LD_LIBRARY_PATH
.
By making the change to using RPATH
, it is no longer possible to replace JDK internal native libraries using LD_LIBRARY_PATH
.
The installation directory name of the Oracle JDK in RPM and DEB packages has changed from /usr/lib/jvm/jdk-${FEATURE}-oracle-${ARCH}
to /usr/lib/jvm/jdk-${VERSION}-oracle-${ARCH}
.
Every update release will be installed in a separate directory on Linux platform.
Installers will create a /usr/java/jdk-${FEATURE}-oracle-${ARCH}
link pointing to the installation directory to allow programs to find the latest JDK version in the ${FEATURE}
release train.
Library | New Version | Module | JBS |
---|---|---|---|
LCMS | 2.16 | java.desktop | JDK-8321489 |
Zlib Data Compression Library | 1.3.1 | java.base | JDK-8324632 |
This release also contains fixes for security vulnerabilities described in the Oracle Critical Patch Update.
➜ Issues fixed in 21.0.4:# | JBS | Component/Subcomponent | Summary |
---|---|---|---|
1 | JDK-8318854 | client-libs/java.awt | [macos14] Running any AWT app prints Secure coding warning |
2 | JDK-8317771 | client-libs/javax.accessibility | [macos14] Expand/collapse a JTree using keyboard freezes the application in macOS 14 Sonoma |
3 | JDK-8322239 | client-libs/javax.swing | [macos] a11y : java.lang.NullPointerException is thrown when focus is moved on the JTabbedPane |
4 | JDK-8187759 | client-libs/javax.swing | Background not refreshed when painting over a transparent JFrame |
5 | JDK-8320692 | client-libs/javax.swing | Null icon returned for .exe without custom icon |
6 | JDK-8324858 | core-libs | [vectorapi] Bounds checking issues when accessing memory segments |
7 | JDK-8315373 | core-libs/java.lang | Change VirtualThread to unmount after freezing, re-mount before thawing |
8 | JDK-8322846 | core-libs/java.lang | Running with -Djdk.tracePinnedThreads set can hang |
9 | JDK-8322818 | core-libs/java.lang | Thread::getStackTrace can fail with InternalError if virtual thread is timed-parked when pinned |
10 | JDK-8321270 | core-libs/java.lang | Virtual Thread.yield consumes parking permit |
11 | JDK-8312498 | core-libs/java.lang | Thread::getState and JVM TI GetThreadState should return TIMED_WAITING virtual thread is timed parked |
12 | JDK-8320570 | core-libs/java.lang | NegativeArraySizeException decoding >1G UTF8 bytes with non-ascii characters |
13 | JDK-8306040 | core-libs/java.net | HttpResponseInputStream.available() returns 1 on empty stream |
14 | JDK-8318599 | core-libs/java.net | HttpURLConnection cache issues leading to crashes in JGSS w/ native GSS introduced by 8303809 |
15 | JDK-8318322 | core-libs/java.util:i18n | Update IANA Language Subtag Registry to Version 2023-10-16 |
16 | JDK-8327631 | core-libs/java.util:i18n | Update IANA Language Subtag Registry to Version 2024-03-07 |
17 | JDK-8313702 | core-libs/java.util:i18n | Update IANA Language Subtag Registry to Version 2023-08-02 |
18 | JDK-8325672 | hotspot/compiler | C2: allocate PhaseIdealLoop::_loop_or_ctrl from C->comp_arena() |
19 | JDK-8323065 | hotspot/compiler | Unneccesary CodeBlob lookup in CompiledIC::internal_set_ic_destination |
20 | JDK-8320206 | hotspot/compiler | Some intrinsics/stubs missing vzeroupper on x86_64 |
21 | JDK-8316670 | hotspot/compiler | Remove effectively unused nmethodBucket::_count |
22 | JDK-8317235 | hotspot/compiler | Remove Access API use in nmethod class |
23 | JDK-8316669 | hotspot/compiler | ImmutableOopMapSet destructor not called |
24 | JDK-8317677 | hotspot/compiler | Specialize Vtablestubs::entry_for() for VtableBlob |
25 | JDK-8293069 | hotspot/compiler | Make -XX:+Verbose less verbose |
26 | JDK-8316959 | hotspot/compiler | Improve InlineCacheBuffer pending queue management |
27 | JDK-8314220 | hotspot/compiler | Configurable InlineCacheBuffer size |
28 | JDK-8324050 | hotspot/compiler | Issue store-store barrier after re-materializing objects during deoptimization |
29 | JDK-8326638 | hotspot/compiler | Crash in PhaseIdealLoop::remix_address_expressions due to unexpected Region instead of Loop |
30 | JDK-8328165 | hotspot/compiler | improve assert(idx < _maxlrg) failed: oob |
31 | JDK-8325432 | hotspot/compiler | enhance assert message "relocation addr must be in this section" |
32 | JDK-8313899 | hotspot/compiler | JVMCI exception Translation can fail in TranslatedException.<clinit> |
33 | JDK-8328702 | hotspot/compiler | C2: Crash during parsing because sub type check is not folded |
34 | JDK-8317809 | hotspot/compiler | Insertion of free code blobs into code cache can be very slow during class unloading |
35 | JDK-8324817 | hotspot/gc | Parallel GC does not pre-touch all heap pages when AlwaysPreTouch enabled and large page disabled |
36 | JDK-8315605 | hotspot/gc | G1: Add number of nmethods in code roots scanning statistics |
37 | JDK-8317350 | hotspot/gc | Move code cache purging out of CodeCache::UnloadingScope |
38 | JDK-8318585 | hotspot/gc | Rename CodeCache::UnloadingScope to UnlinkingScope |
39 | JDK-8318720 | hotspot/gc | G1: Memory leak in G1CodeRootSet after JDK-8315503 |
40 | JDK-8317007 | hotspot/gc | Add bulk removal of dead nmethods during class unloading |
41 | JDK-8288936 | hotspot/jfr | Wrong lock ordering writing G1HeapRegionTypeChange JFR event |
42 | JDK-8326106 | hotspot/jfr | Write and clear stack trace table outside of safepoint |
43 | JDK-8312777 | hotspot/jvmti | notifyJvmtiMount before notifyJvmtiUnmount |
44 | JDK-8322282 | hotspot/runtime | Incorrect LoaderConstraintTable::add_entry after JDK-8298468 |
45 | JDK-8316132 | hotspot/runtime | CDSProtectionDomain::get_shared_protection_domain should check for exception |
46 | JDK-8319137 | hotspot/runtime | release _object in ObjectMonitor dtor to avoid races |
47 | JDK-8324514 | hotspot/runtime | ClassLoaderData::print_on should print address of class loader |
48 | JDK-8320275 | hotspot/runtime | assert(_chunk->bitmap().at(index)) failed: Bit not set at index |
49 | JDK-8323595 | hotspot/runtime | is_aligned(p, alignof(OopT))) assertion fails in Jetty without compressed OOPs |
50 | JDK-8320515 | hotspot/runtime | assert(monitor->object_peek() != nullptr) failed: Owned monitors should not have a dead object |
51 | JDK-8319896 | hotspot/runtime | Remove monitor deflation from final audit |
52 | JDK-8325437 | hotspot/runtime | Safepoint polling in monitor deflation can cause massive logs |
53 | JDK-8316002 | hotspot/runtime | Remove unnecessary seen_dead_loader in ClassLoaderDataGraph::do_unloading |
54 | JDK-8315998 | hotspot/runtime | Remove dead ClassLoaderDataGraphKlassIteratorStatic |
55 | JDK-8319955 | hotspot/runtime | Improve dependencies removal during class unloading |
56 | JDK-8324824 | hotspot/runtime | AArch64: Detect Ampere-1B core and update default options for Ampere CPUs |
57 | JDK-8327036 | hotspot/runtime | [macosx-aarch64] SIGBUS in MarkActivationClosure::do_code_blob reached from Unsafe_CopySwapMemory0 |
58 | JDK-8322783 | hotspot/runtime | prioritize /etc/os-release over /etc/SuSE-release in hs_err/info output |
59 | JDK-8319048 | hotspot/runtime | Monitor deflation unlink phase prolongs time to safepoint |
60 | JDK-8315559 | hotspot/runtime | Delay TempSymbol cleanup to avoid symbol table churn |
61 | JDK-8324933 | hotspot/runtime | ConcurrentHashTable::statistics_calculate synchronization is expensive |
62 | JDK-8326643 | security-libs/java.security | JDK server does not send a dummy change_cipher_spec record after HelloRetryRequest message |
63 | JDK-8312383 | security-libs/javax.net.ssl | Log X509ExtendedKeyManager implementation class name in TLS/SSL connection |
64 | JDK-8294699 | tools/jpackage | Launcher causes lingering busy cursor |
65 | JDK-8325203 | tools/jpackage | System.exit(0) kills the launched 3rd party application |