第 2 章 Eclipse Temurin 功能
Eclipse Temurin 不包含来自 OpenJDK 上游发行版的结构更改。
有关 Eclipse Temurin 的最新 OpenJDK 21 发行版本的更改和安全修复列表,请参阅 OpenJDK 21.0.3 Released。
新功能及功能增强
查看以下发行注记以了解 Eclipse Temurin 21.0.3 发行版本中包含的新功能和功能增强:
Java 编译器通过拒绝记录模式中的 final
关键字与 Java 语言规范一致
Java 21 版本增强了 Java 语言,其特征与交换机语句的模式匹配。但是,OpenJDK 21 提供了一个 javac
编译器,允许在记录模式 之前使用最终
关键字(例如,最终 R (…)->
)。这对 final
关键字的使用违反了 Java 语言规范。
在 OpenJDK 21.0.3 中,javac
编译器与 Java 语言规格一致。此增强意味着在 switch 语句中包含 最终
关键字的任何程序现在都无法编译。在这种情况下,为了确保程序成功编译,您必须删除 final
关键字。
请参阅 JDK-8317300 (JDK Bug System)。
Java 更新到 Apache Santuario 3.0.3 的 XML 安全性。
在 OpenJDK 21.0.3 中,XML 签名实现基于 Apache Santuario 3.0.3。
此增强包括以下四个基于 SHA3 的 RSA-MGF1 SignatureMethod
算法:
-
SHA3_224_RSA_MGF1
-
SHA3_256_RSA_MGF1
-
SHA3_384_RSA_MGF1
-
SHA3_512_RSA_MGF1
由于在更新版本中无法修改 javax.xml.crypto.dsig.SignatureMethod
API,以便为新算法提供恒定值,因此请为这些算法使用以下等效的字符串字面值:
-
http://www.w3.org/2007/05/xmldsig-more#sha3-224-rsa-MGF1
-
http://www.w3.org/2007/05/xmldsig-more#sha3-256-rsa-MGF1
-
http://www.w3.org/2007/05/xmldsig-more#sha3-384-rsa-MGF1
-
http://www.w3.org/2007/05/xmldsig-more#sha3-512-rsa-MGF1
请参阅 JDK-8319124 (JDK Bug System)。
TrimNativeHeapInterval
选项可作为产品交换机使用
OpenJDK 21.0.3 提供 -XX:TrimNativeHeapInterval=ms
选项作为官方产品交换机。此功能增强使 JVM 可以在受支持的平台上以指定间隔(以毫秒为单位)修剪原生堆。目前,只有这个增强支持的平台是带有 glibc
的 Linux。
您可以通过设置 TrimNativeHeapInterval=0
来禁用修剪。修剪功能默认为禁用。
请参阅 JDK-8325496 (JDK Bug System)。
在大多数 Linux 桌面上,SystemTray.isSupported ()
方法返回 false
在 OpenJDK 21.0.3 中,在不支持 SystemTray
API 的系统中,java.awt.SystemTray.isSupported ()
方法会返回 false
。此功能增强取决于 SystemTray
API 规格。
SystemTray
API 用于与系统桌面中的任务栏交互,以提供通知。SystemTray
可能还包括代表应用程序的图标。由于底层平台问题,对任务栏图标的 GNOME 桌面支持在数年内无法正常工作。此平台问题会影响 JDK 在 GNOME 桌面上提供 SystemTray
支持的能力。此问题通常会影响使用 GNOME Shell 44 或更早版本的系统。
因为缺少正确的 SystemTray
支持是某些系统上的长期问题,所以这个 API 增强在受影响系统中返回 false
可能会对用户造成最小的影响。
请参阅 JDK-8322750 (JDK Bug System)。
意外的 R1 和 E1 根证书
在 OpenJDK 21.0.3 中,cacerts
truststore 包括两个 Certainly root 证书:
- 证书 1
- 名称 :Certainly
- 别名名称:clearrootr1
- 区分名称:CN=Certainly Root R1, O=Certainly, C=US
- 证书 2
- 名称 :Certainly
- 别名名称:clearroote1
- 区分名称:CN=Certainly Root E1, O=Certainly, C=US
请参阅 JDK-8321408 (JDK Bug System)。
为sng 集合根对大型对象阵列进行精确扫描
在生成对象的集合过程中,Parallel Garbage Collector (GC)将旧生成对象分区到 64 kB 条带,以扫描对年轻代的引用。这些条带被分配给 worker 线程,以便并行执行扫描。
以前的 OpenJDK 21 版本不会将 worker 线程限制为自己的条带。这缺少对 parallelism 的限制。例如,如果在分配给特定 worker 线程的条带中启动大型对象,则此线程最终可能会扫描多个条带上有数千个引用的对象。
OpenJDK 21.0.3 将每个 worker 线程限制为其分配的条带。现在,每个线程只处理大型对象阵列的有趣的部分。当大型对象阵列存在时,对 Parallel GC 暂停现在类似于 Garbage-First (G1)收集器的暂停。在某些情况下,这个增强有助于将暂停的长度减少 75-80%。例如,之前版本的一个 100millisecond 暂停可能会降低到这个版本中的 20millisecond pause。
请参阅 JDK-8310031 (JDK Bug System)。
修复了使用 ZGC 和非默认 ObjectAlignmentInBytes 值时潜在的 JVM 失败
在早期版本的 OpenJDK 21 中,如果您使用 -XX:+UseZGC
选项运行 JVM,且 -XX:ObjectAlignmentInBytes
的非默认值,则 JVM 可能会失败或出现故障。出现这个问题的原因是,ZBarrierSet::clone_obj_array
会忽略对象数组末尾的 padding。
OpenJDK 21.0.3 解决了这个问题,确保在使用 Z Garbage Collector (ZGC)和非默认值时,您可以成功运行 JVM,以便在运行 JVM 时进行 Java 对象对齐。
请参阅 JDK-8325074 (JDK Bug System)。
更新于 2024-05-10