第 2 章 Eclipse Temurin 功能
Eclipse Temurin 不包含来自 OpenJDK 上游发行版的结构性更改。
有关 Eclipse Temurin 最新 OpenJDK 21 发行版本中的更改和安全修复的更多信息,请参阅 OpenJDK 21.0.8 发行版本。
2.1. 新功能及功能增强 复制链接链接已复制到粘贴板!
Eclipse Temurin 21.0.8 包括以下新功能和增强。
修复在编译边界之间对 javac 插件不可见的类型注解
在以前的 OpenJDK 版本中,javac 编译器仅在从源代码文件加载类型时才提供对类型注解的访问。如果从 bytecode 加载了类型,则省略任何类型注解。
在 OpenJDK 21.0.8 中,TypeMirror 接口还提供对从字节代码加载的类型注解的访问。您可以使用 AnnotationMirror#getAnnotationMirrors 方法获取这些注解。这些注解包含在 AnnotationMirror#toString 方法的输出中。
如果您的程序依赖从字节码加载的元素中没有类型注解,您必须更新这些程序来处理类型注解。
由于持续的问题(请参阅 JDK-8360406),因此默认情况下不启用此功能。如果您希望 javac 编译器包含从 bytecode 加载的类型的类型注解,请指定 -XDaddTypeAnnotationsToSymbol=true 选项。
请参阅 JDK-8341779 (JDK Bug System)。
改进了 HTTP/2 流控制检查
OpenJDK 21.0.8 增强了 java.net.http.HttpClient 对象中的 HTTP/2 客户端实现,以向服务器报告流控制错误。在大多数情况下,此行为通常是透明的。但是,这可能意味着当连接到一个无法正确处理这些错误的 HTTP/2 服务器时,流会被重置或连接。
您可以使用以下现有属性来调整流控制限制:
jdk.httpclient.connectionWindowSize- 指定 HTTP/2 客户端连接窗口大小,以字节为单位
-
默认值:
2^26 -
范围:
2^16-1到2^31-1
jdk.httpclient.windowSize- 指定 HTTP/2 客户端流窗口大小,以字节为单位
-
默认值:16777
216(16 MB) -
范围:
2^14到2^31-1
如果指定了无效的值,则使用默认值。此功能增强保证连接窗口大小的实际值小于流窗口大小。
请参阅 JDK-8342075 (JDK Bug System)。
jcmd 的新诊断命令以打印注解的进程内存映射
在 OpenJDK 21.0.8 中,jcmd 工具包含以下新命令,用于将 JVM 的虚拟内存映射打印到标准输出(stdout)或一个文件。
jcmd & lt;pid> System.map-
将由 <
pid> 标识的 JVM 的虚拟内存映射输出到stdout jcmd & lt;pid& gt; System.dump_map-
将由 <
pid> 标识的 JVM 的虚拟内存映射打印到当前目录中的vm_memory_map_<pid>.txt文件中
如果启用了原生内存跟踪(NMT),这些命令还会打印有关虚拟内存片段的 NMT 信息。
请参阅 JDK-8318636 (JDK Bug System)。
更新了 HSS/LMS 公钥编码
在 OpenJDK 21.0.8 中,分层签名系统(HSS)和 Leighton-Micali 签名(LMS)公钥的 X.509 编码格式现在与互联网工程任务 Force (IETF) RFC 9708 中的最新标准一致。此功能增强还意味着删除了有关公钥值的 OCTET_STRING ping。
对于与早期版本兼容,在读取此发行版本前编码的密钥时,JDK 仍然检测到存在可分辨的编码规则(DER)编码。
请参阅 JDK-8347596 (JDK Bug System)。
OCSP readtimeout 属性与 OCSP 超时的兼容性
OpenJDK 21 的初始发行版本引入了 com.sun.security.ocsp.readtimeout 属性,它指定了读取在线证书状态协议(OCSP)数据的超时时间。此属性与现有的 com.sun.security.ocsp.timeout 属性配对,为 OCSP 连接和证书检索提供更大的控制。通过使用这些属性,您可以为读取 OCSP 数据以及相互独立的传输层设置超时。
在以前的 OpenJDK 21 版本中,如果您没有为 com.sun.security.ocsp.readtimeout 指定一个值,则读取 OCSP 数据的默认超时时间为 15 秒。
在 OpenJDK 21.0.8 中,如果您没有为 com.sun.security.ocsp.readtimeout 指定一个值,则读取 OCSP 数据的默认超时时间基于 com.sun.security.ocsp.timeout 属性的值。如果您不要为 com.sun.security.ocsp.timeout 指定一个值,则默认的超时时间为 15 秒,如早期版本中所示。
此增强与 OpenJDK 17.0.15 中引入的 com.sun.security.ocsp.readtimeout 行为匹配。此增强还与 OpenJDK 版本在 com.sun.security.ocsp.readtimeout 属性前存在的默认行为匹配。
请参阅 JDK-8347506 (JDK Bug System)。
添加了 Sectigo CS 和 TLS 根证书
在 OpenJDK 21.0.8 中,cacerts truststore 包括四个 Sectigo root 证书,包括两个 code-signing (CS)证书和两个 TLS 证书:
- 证书 1
- 名称 :Sectigo Limited
- 别名名称:sectigocodesignroote46
- distinguished name: CN=Sectigo Public Code Signing Root E46, O=Sectigo Limited, C=GB
- 证书 2
- 名称 :Sectigo Limited
- 别名名称:sectigocodesignrootr46
- distinguished name: CN=Sectigo Public Code Signing Root R46, O=Sectigo Limited, C=GB
- 证书 3
- 名称 :Sectigo Limited
- 别名名称:sectigotlsroote46
- 区分名称: CN=Sectigo Public Server Authentication Root E46, O=Sectigo Limited, C=GB
- 证书 4
- 名称 :Sectigo Limited
- 别名名称:sectigotlsrootr46
- distinguished name: CN=Sectigo Public Server Authentication Root R46, O=Sectigo Limited, C=GB
请参阅 JDK-8359170 (JDK Bug System)。
修复了在将 G1 垃圾收集器使用多个 NUMA 节点时区域分配中潜在的故障的问题
在非统一内存访问(NUMA)系统上,操作系统可以选择将任务从一个 NUMA 节点迁移到另一个 NUMA 节点。在 Garbage-First (G1)垃圾收集器中,G1AllocRegion 对象与 NUMA 节点关联。G1Allocator 代码只获取当前线程的 G1AllocRegion 对象,但操作系统调度可能会导致 NUMA-to-thread 关联中的任意更改。
在以前的 OpenJDK 版本中,当将 G1 垃圾收集器与多个 NUMA 节点搭配使用时,当使用了 G1AllocRegion 对象时,可能会失败。
OpenJDK 21.0.8 通过确保整个操作中使用相同的 NUMA 节点和相关 G1AllocRegion 对象来解决这个问题。