January 16, 2024
The full version string for this update release is 21.0.2+13 (where "+" means "build"). The version number is 21.0.2.
For more information, refer to Timezone Data Versions in the Java Runtime.
The security baselines for the Java Runtime at the time of the release of JDK 21.0.2 are specified in the following table:
Java Family Version | Security Baseline (Full Version String) |
---|---|
21 | 21.0.2+13 |
17 | 17.0.10+11 |
11 | 11.0.22+9 |
8 | 8u401-b10 |
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.2) be used after the next critical patch update scheduled for April 16, 2024.
Java SE Subscription products customers managing JRE updates/installs for large number of desktops should consider using Java Management Service (JMS).
The java.net.ExtendedSocketOptions
TCP_KEEPIDLE
and TCP_KEEPINTERVAL
are supported on Windows platforms starting from Windows 10 version 1709 and onwards. TCP_KEEPCOUNT
is supported starting from Windows 10 version 1703 and onwards.
BasicFileAttributes.creationTime
Returns Birth Time on Linux
(JDK-8316304)
On Linux (kernel version 4.11 or newer, glibc version 2.28 or newer), BasicFileAttributes.creationTime
now returns the creation or birth time of the file through the stx_btime
element of struct statx
. In previous JDK releases, the last modified time was returned. If the birth time is supported by the platform but not by the file system, then the epoch 1970-01-01T00:00:00Z
is returned.
When the C1 compiler is the only compiler available to the VM, it applies loop predication to remove array access range checks from loop bodies. Due to a defect, this optimization was disabled, potentially leading to a performance regression.
This only affects the client VM or VM's running with the non-default command line flags -XX:+NeverActAsServerClassMachine
or -XX:TieredStopAtLevel=[1,2,3]
.
The JDK 21 issue that could potentially lead to JVM crashes or incorrect execution when running the JVM with -XX:+UseZGC
and non-default value of -XX:ObjectAlignmentInBytes
has been resolved, and it is possible again to use this combination of JVM options.
The following root certificates have been added to the cacerts truststore:
+ DigiCert, Inc.
+ digicertcseccrootg5
DN: CN=CN=DigiCert CS ECC P384 Root G5, O="DigiCert, Inc.", C=US
+ DigiCert, Inc.
+ digicertcsrsarootg5
DN: CN=DigiCert CS RSA4096 Root G5, O="DigiCert, Inc.", C=US
+ DigiCert, Inc.
+ digicerttlseccrootg5
DN: DigiCert TLS ECC P384 Root G5, O="DigiCert, Inc.", C=US
+ DigiCert, Inc.
+ digicerttlsrsarootg5
DN: DigiCert TLS RSA4096 Root G5, O="DigiCert, Inc.", C=US
The following root certificates have been added to the cacerts truststore:
+ eMudhra Technologies Limited
+ emsignrootcag1
DN: CN=emSign Root CA - G1, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN
+ eMudhra Technologies Limited
+ emsigneccrootcag3
DN: CN=emSign ECC Root CA - G3, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN
+ eMudhra Technologies Limited
+ emsignrootcag2
DN: CN=emSign Root CA - G2, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN
The following root certificate has been added to the cacerts truststore:
+ Telia Root CA v2
+ teliarootcav2
DN: CN=Telia Root CA v2, O=Telia Finland Oyj, C=FI
The following root certificate has been added to the cacerts truststore:
+ Let's Encrypt
+ letsencryptisrgx2
DN: CN=ISRG Root X2, O=Internet Security Research Group, C=US
NMT reports will now show peak values for all categories. Peak values contain the highest value for committed memory in a given NMT category over the lifetime of the JVM process.
If the committed memory for an NMT category is currently at peak, NMT prints "at peak"; otherwise, it prints the peak value.
For example:
- Compiler (reserved=230KB, committed=230KB) (malloc=34KB #64) (peak=49KB #71) (arena=196KB #4) (peak=6126KB #16)
This shows Compiler arena memory peaked at a bit more than 6MB, whereas it now hovers around 200 KB.
On Linux, if the JVM is started with +UseTransparentHugePages
but the system does not support Transparent Huge Pages, a warning will now be printed to stdout:
UseTransparentHugePages disabled; transparent huge pages are not supported by the operating system.
hs_err
Files Now Print the Lock Stack
(JDK-8316735)
A section containing the thread local lock stack has been added to hs_err
report files. It only gets printed when the new lightweight locking mode is enabled (-XX:LockingMode=2
).
An example is given here with details about the locked objects omitted:
Lock stack of current Java thread (top to bottom):
LockStack[1]: nsk.share.jdi.EventHandler
...
LockStack[0]: java.util.Collections$SynchronizedRandomAccessList
...
It lists objects which are lightweight locked, through synchronized
methods or statements, by the Java thread which is being analyzed. The object which has been locked most recently is printed first. Objects which are not lightweight locked are not displayed in this section.
This release also contains fixes for security vulnerabilities described in the Oracle Critical Patch Update.
➜ Issues fixed in 21.0.2:# | JBS | Component/Subcomponent | Summary |
---|---|---|---|
1 | JDK-8294158 | client-libs | HTML formatting for PassFailJFrame instructions |
2 | JDK-8312612 | client-libs | Handle WideCharToMultiByte return values |
3 | JDK-8316741 | client-libs/2d | BasicStroke.createStrokedShape miter-limits failing on small shapes |
4 | JDK-8312191 | client-libs/2d | ColorConvertOp.filter for the default destination is too slow |
5 | JDK-8318951 | client-libs/2d | Additional negative value check in JPEG decoding |
6 | JDK-8313643 | client-libs/2d | Update HarfBuzz to 8.2.2 |
7 | JDK-8313164 | client-libs/java.awt | src/java.desktop/windows/native/libawt/windows/awt_Robot.cpp GetRGBPixels adjust releasing of resources |
8 | JDK-8316030 | client-libs/java.awt | Update Libpng to 1.6.40 |
9 | JDK-8301846 | client-libs/javax.sound | Invalid TargetDataLine after screen lock when using JFileChooser or COM library |
10 | JDK-8294535 | client-libs/javax.swing | Add screen capture functionality to PassFailJFrame |
11 | JDK-8294427 | client-libs/javax.swing | Check boxes and radio buttons have rendering issues on Windows in High DPI env |
12 | JDK-8319922 | core-libs | libCreationTimeHelper.so fails to link in JDK 21 |
13 | JDK-8309545 | core-libs/java.lang | Thread.interrupted from virtual thread needlessly resets interrupt status |
14 | JDK-8308452 | core-libs/java.lang | Extend internal Architecture enum with byte order and address size |
15 | JDK-8316879 | core-libs/java.lang | RegionMatches1Tests fails if CompactStrings are disabled after JDK-8302163 |
16 | JDK-8318415 | core-libs/java.lang | Adjust describing comment of os_getChildren after 8315026 |
17 | JDK-8267509 | core-libs/java.lang.invoke | Improve IllegalAccessException message to include the cause of the exception |
18 | JDK-8319436 | core-libs/java.lang:reflect | Proxy.newProxyInstance throws NPE if loader is null and interface not visible from class loader |
19 | JDK-8317736 | core-libs/java.net | Stream::handleReset locks twice |
20 | JDK-8316337 | core-libs/java.nio | (bf) Concurrency issue in DirectByteBuffer.Deallocator |
21 | JDK-8312166 | core-libs/java.nio | (dc) DatagramChannel's socket adaptor does not release carrier thread when blocking in receive |
22 | JDK-8316304 | core-libs/java.nio | (fs) Add support for BasicFileAttributes.creationTime() for Linux |
23 | JDK-8317603 | core-libs/java.nio | Improve exception messages thrown by sun.nio.ch.Net native methods (win) |
24 | JDK-8267502 | core-libs/java.util.concurrent | JDK-8246677 caused 16x performance regression in SynchronousQueue |
25 | JDK-8314263 | core-libs/java.util.logging | Signed jars triggering Logger finder recursion and StackOverflowError |
26 | JDK-8318957 | core-svc/debugger | Enhance agentlib:jdwp help output by info about allow option |
27 | JDK-8301489 | hotspot/compiler | C1: ShortLoopOptimizer might lift instructions before their inputs |
28 | JDK-8316178 | hotspot/compiler | Better diagnostic header for CodeBlobs |
29 | JDK-8315088 | hotspot/compiler | C2: assert(wq.size() - before == EMPTY_LOOP_SIZE) failed: expect the EMPTY_LOOP_SIZE nodes of this body if empty |
30 | JDK-8315377 | hotspot/compiler | C2: assert(u->find_out_with(Op_AddP) == nullptr) failed: more than 2 chained AddP nodes? |
31 | JDK-8316514 | hotspot/compiler | Better diagnostic header for VtableStub |
32 | JDK-8295555 | hotspot/compiler | Primitive wrapper caches could be `@Stable` |
33 | JDK-8315545 | hotspot/compiler | C1: x86 cmove can use short branches |
34 | JDK-8316179 | hotspot/compiler | Use consistent naming for lightweight locking in MacroAssembler |
35 | JDK-8303737 | hotspot/compiler | C2: Load can bypass subtype check that enforces it's from the right object type |
36 | JDK-8316130 | hotspot/compiler | Incorrect control in LibraryCallKit::inline_native_notify_jvmti_funcs |
37 | JDK-8312440 | hotspot/compiler | assert(cast != nullptr) failed: must have added a cast to pin the node |
38 | JDK-8316181 | hotspot/compiler | Move the fast locking implementation out of the .ad files |
39 | JDK-8313756 | hotspot/compiler | [BACKOUT] 8308682: Enhance AES performance |
40 | JDK-8313760 | hotspot/compiler | [REDO] Enhance AES performance |
41 | JDK-8320209 | hotspot/compiler | VectorMaskGen clobbers rflags on x86_64 |
42 | JDK-8317507 | hotspot/compiler | C2 compilation fails with "Exceeded _node_regs array" |
43 | JDK-8308103 | hotspot/compiler | Massive (up to ~30x) increase in C2 compilation time since JDK 17 |
44 | JDK-8316679 | hotspot/compiler | C2 SuperWord: wrong result, load should not be moved before store if not comparable |
45 | JDK-8315920 | hotspot/compiler | C2: "control input must dominate current control" assert failure |
46 | JDK-8318889 | hotspot/compiler | C2: add bailout after assert Bad graph detected in build_loop_late |
47 | JDK-8316414 | hotspot/compiler | C2: large byte array clone triggers "failed: malformed control flow" assertion failure on linux-x86 |
48 | JDK-8314191 | hotspot/compiler | C2 compilation fails with "bad AD file" |
49 | JDK-8316719 | hotspot/compiler | C2 compilation still fails with "bad AD file" |
50 | JDK-8316906 | hotspot/gc | Clarify TLABWasteTargetPercent flag |
51 | JDK-8315869 | hotspot/runtime | UseHeavyMonitors not used |
52 | JDK-8319828 | hotspot/runtime | runtime/NMT/VirtualAllocCommitMerge.java may fail if mixing interpreted and compiled native invocations |
53 | JDK-8316967 | hotspot/runtime | Correct the scope of vmtimer in UnregisteredClasses::load_class |
54 | JDK-8316581 | hotspot/runtime | Improve performance of Symbol::print_value_on() |
55 | JDK-8318895 | hotspot/runtime | Deoptimization results in incorrect lightweight locking stack |
56 | JDK-8316436 | hotspot/runtime | ContinuationWrapper uses unhandled nullptr oop |
57 | JDK-8310596 | hotspot/runtime | Utilize existing method frame::interpreter_frame_monitor_size_in_bytes() |
58 | JDK-8306561 | hotspot/runtime | Possible out of bounds access in print_pointer_information |
59 | JDK-8313782 | hotspot/runtime | Add user-facing warning if THPs are enabled but cannot be used |
60 | JDK-8316735 | hotspot/runtime | Print LockStack in hs_err files |
61 | JDK-8316468 | hotspot/runtime | os::write incorrectly handles partial write |
62 | JDK-8320597 | security-libs/java.security | RSA signature verification fails on signed data that does not encode params correctly |
63 | JDK-8314045 | security-libs/javax.crypto | ArithmeticException in GaloisCounterMode |
64 | JDK-8313742 | security-libs/javax.crypto | ZipFile.getManifestName fails during jar verification for Spring Boot |
65 | JDK-8315452 | tools/javac | Erroneous AST missing modifiers for partial input |
66 | JDK-8318144 | tools/javac | Match on enum constants with body compiles but fails with MatchException |
67 | JDK-8225377 | tools/javac | type annotations are not visible to javac plugins across compilation boundaries |
68 | JDK-8320001 | tools/javac | javac crashes while adding type annotations to the return type of a constructor |
69 | JDK-8322883 | tools/javac | [BACKOUT] 8225377: type annotations are not visible to javac plugins across compilation boundaries |
70 | JDK-8315942 | tools/jlink | Sort platform enums and definitions after JDK-8304913 follow-ups |
71 | JDK-8315383 | tools/jlink | jlink SystemModulesPlugin incorrectly parses the options |
72 | JDK-8301247 | tools/jpackage | JPackage app-image exe launches multiple exe's in JDK 17+ |
73 | JDK-8313792 | tools/jshell | Verify 4th party information in src/jdk.internal.le/share/legal/jline.md |