红帽构建的 OpenJDK 21.0.1 发行注记

Red Hat build of OpenJDK 21

Red Hat Customer Content Services

摘要

红帽构建的 OpenJDK 21.0.1 发行注记 文档概述了红帽构建的 OpenJDK 21 中的新功能以及潜在的已知问题列表和可能的临时解决方案。

前言

红帽构建的 OpenJDK (Open Java Development Kit)是 Java Platform, Standard Edition (Java SE)的一个免费的开源实现。红帽构建的 OpenJDK 有四个版本: 8u、11u、17u 和 21u。

红帽构建的 OpenJDK 软件包在 Red Hat Enterprise Linux 和 Microsoft Windows 上提供,并作为红帽生态系统目录中的 JDK 和 JRE 提供。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 红帽构建的 OpenJDK 支持政策

红帽在其产品中支持选择版本的 OpenJDK 的主版本。为了实现一致性,这些版本与指定为长期支持 (LTS) 的 Oracle JDK 版本类似。

自首次引入该版本起,红帽构建的 OpenJDK 主版本将最少提供六年的支持。如需更多信息,请参阅 OpenJDK 生命周期和支持政策

注意

RHEL 6 于 2020 年 11 月结束其生命周期。因此,红帽构建的 OpenJDK 不支持 RHEL 6 作为支持的配置。

第 2 章 与上游 OpenJDK 21 的不同

Red Hat 在 Red Hat Enterprise Linux 中构建 OpenJDK 包含了很多来自 OpenJDK 上游发行版的结构更改。红帽构建的 Microsoft Windows 版本尝试尽快遵循 Red Hat Enterprise Linux 更新。

以下列表详细介绍了最显著的 OpenJDK 21 更改:

  • FIPS 支持。Red Hat build of OpenJDK 21 会自动检测 RHEL 是否处于 FIPS 模式,并自动配置红帽构建的 OpenJDK 21 以在该模式下运行。此更改不适用于适用于 Microsoft Windows 的红帽构建的 OpenJDK 构建。
  • 加密策略支持。红帽构建的 OpenJDK 21 从 RHEL 系统配置获取启用的加密算法和密钥大小限制列表。这些配置组件由传输层安全(TLS)加密协议、证书路径验证和任何签名的 JAR 使用。您可以设置不同的安全配置集来平衡安全性和兼容性。此更改不适用于适用于 Microsoft Windows 的红帽构建的 OpenJDK 构建。
  • src.zip 文件包含红帽构建的 OpenJDK 附带的所有 JAR 库的源。
  • RHEL 上的红帽 OpenJDK 构建使用系统范围的时区数据文件作为时区信息的来源。
  • RHEL 上的红帽构建的 OpenJDK 使用系统范围的 CA 证书。
  • Microsoft Windows 上的红帽构建的 OpenJDK 包括 RHEL 的最新可用时区数据。
  • Microsoft Windows 上的红帽构建的 OpenJDK 使用 RHEL 的最新可用 CA 证书。

第 3 章 与 Red Hat build of OpenJDK 17 的不同

Red Hat build of OpenJDK 21 包括 Red Hat build of OpenJDK 17 不提供很多改进,这是之前的长期支持(LTS)发行版本。

有关红帽构建的 OpenJDK 21 额外 Java 增强提议(JEP)的更多信息,请参阅 JDK 21 集成自 JDK 17 以来的 JDK 21 中的 JEP

第 4 章 弃用和不支持的红帽构建的 OpenJDK 功能

在安装 Red Hat build of OpenJDK 21 前,请确保查看以下已弃用和不支持的功能:

用于 Windows 软件包的红帽构建的 OpenJDK 21 中的 JDK Mission Control
红帽构建的 OpenJDK 21 的 Windows 安装程序和 zip 存档不再提供 JDK Mission Control (JMC)的发布。您可以使用 Red Hat build of Cryostat 管理在云平台(如 Red Hat OpenShift )上部署的 Java 应用程序的 JFR 记录。有关删除 JMC 的更多信息,请参阅红帽知识库文章: JDK Mission Control (JMC)在 JDK 21 中?
弃用最终删除
此发行版本弃用 Finalization,用于在以后的版本中删除。如需更多信息,请参阅 JEP 421: Deprecate Finalization for Removal
准备禁止动态加载代理
当代理动态加载到正在运行的 JVM 时,这个版本会发出警告。在以后的发行版本中,默认不允许动态加载代理。如需更多信息,请参阅 JEP 451: Prepare to Disallow the Dynamic Loading of Agents
注意

红帽不提供具有 32 位支持的 OpenJDK 构建。在 OpenJDK 21 中,Windows 32 位 x86 支持也已被弃用。这个功能将在以后的发行版本中被删除。如需更多信息,请参阅 JEP 449:为 Removal 缩减 Windows 32 位 x86 端口

第 5 章 红帽构建的 OpenJDK 21 的新功能

红帽构建 OpenJDK 21 的初始发行版本包括了改进 Java 应用程序的新功能。

红帽构建的 OpenJDK 21 包括以下新功能:

默认 UTF-8
如需更多信息,请参阅 JEP 400: UTF-8
简单 Web 服务器
如需更多信息,请参阅 JEP 408: Simple Web Server
Java API 文档中的代码片段
如需更多信息,请参阅 Java API 文档中的 JEP 413: Code Snippets
使用方法句柄重新实施内核反映
如需更多信息,请参阅 JEP 416: Reimplement Core Reflection with Method Handles
互联网地址解析 SPI
如需更多信息,请参阅 JEP 418: Internet-Address Resolution SPI
Linux/fapolicyd-V 端口
如需更多信息,请参阅 JEP 422: Linux/Solaris-V Port
范围值 (预览功能)
如需更多信息,请参阅 JEP 429: Scoped Values (Preview)
字符串模板 (预览功能)
如需更多信息,请参阅 JEP 430: String Templates (Preview)
序列集合
如需更多信息,请参阅 JEP 431: Sequenced Collections
Generational Z Garbage Collector (ZGC)
如需更多信息,请参阅 JEP 439: Generational ZGC
记录模式
如需更多信息,请参阅 JEP 440:记录模式
交换机的模式匹配
如需更多信息,请参阅 JEP 441: Pattern Matching for switch
外部功能和内存(FFM) API (Third preview)
如需更多信息,请参阅 JEP 442: Foreign Function & Memory API (Third Preview)
未命名模式和变量 (预览功能)
如需更多信息,请参阅 JEP 443: Unnamed Patterns and Variables (Preview)
虚拟线程
如需更多信息,请参阅 JEP 444: Virtual Threads
未命名的类和实例主方法 (预览功能)
如需更多信息,请参阅 JEP 445: Unnamed Classes and Instance Main Methods (Preview)
范围值 (预览)
如需更多信息,请参阅 JEP 446: Scoped Values (Preview)
Vector API (sixth incubator)
如需更多信息,请参阅 JEP 448: Vector API (Sixth Incubator)
密钥封装机制 API
如需更多信息,请参阅 JEP 452: Key Encapsulation Mechanism API
结构化并发 (预览功能)
如需更多信息,请参阅 JEP 453: Structured Concurrency (Preview)

第 6 章 Red Hat build of OpenJDK 21.0.1 程序错误修复更新

红帽构建的 OpenJDK 21.0.1 包括以下程序错误修复。

修复了有效 .zip 文件中的 Invalid CEN 标头 错误

红帽构建的 OpenJDK 21.0.0 在 .zip 文件的 ZIP64 字段(JDK-8302483)中引入了额外的验证检查。但是,这些额外的检查会在一些有效的 .zip 文件中导致验证失败,并显示以下错误消息: Invalid CEN header (invalid zip64 extra data field size)

要解决这个问题,红帽构建的 OpenJDK 21.0.1 支持零长度标头和一些 ZIP64 创建工具生成的额外的 padding。

以下第三方工具也发布了补丁,以更好地遵循 .ZIP 文件格式规范:

  • Commons Compress release 1.11 中修复了 Empty CEN Zip64 Extra Headers 的 Apache Commons Compress fix for Empty CEN Zip64 Extra Headers
  • 在 Ant 1.10.14 中修复了 Empty CEN Zip64 Extra Headers 的 Apache Ant 修复
  • 在 BND 5.3 中修复编写无效 Extra Headers 的 BND 问题

    注意

    maven-bundle-plugin 5.1.5 包含 BND 5.3 补丁。

如果这些改进的验证检查导致部署的 ZIP 或 JAR 文件出现问题,请检查 文件的创建方式以及是否可从生成软件获取补丁来解决这个问题。在 Red Hat build of OpenJDK 21.0.0 之后,您可以通过将 jdk.util.zip.disableZip64ExtraFieldValidation 系统属性设置为 true 来禁用这些检查。

请参阅 JDK-8313765 (JDK Bug System)

修复了在内存上使用 Generational ZGC 时 JVM 可能会挂起的问题

在 Red Hat build of OpenJDK 21.0.0 中,当以下所有情况同时发生时,JVM 可能会挂起:

  • JVM 耗尽堆内存。
  • 垃圾收集器(GC)只启动重定位阶段来回收内存。
  • JVM 线程-本地握手请求重新定位对象。

Red Hat build of OpenJDK 21.0.0 引入了一个修复,以避免出现这个潜在死锁。

请参阅 JDK-8311981 (JDK Bug System)

修复了包含 lookaheads 和 lookbehinds 的 Regex 模式上的 java.util.regex.MatchResult 的潜在异常

在 OpenJDK 21.0.0 的红帽构建中,当使用 java.util.regex.Matcher.toMatchResult.toMatchResult ()返回的实例时,对 Matcher$ImmutableMatchResult () 的优化引入了一个意外的回归问题。https://bugs.openjdk.org/browse/JDK-8132995使用包含 lookahead 和 lookbehind assertions 的 java.util.regex.Pattern 类发生这个回归,其中包含组。如果这些组位于匹配项之外,则 java.util.regex.MatchResult threw a StringIndexOutOfBoundsException when access these groups。

红帽构建的 OpenJDK 21.0.1 通过计算一个最低起始位置来解决这个问题,并使用这个最低起始位置,而不是构建 String 对象时第一个匹配项的位置。

请参阅 JDK-8312976 (JDK Bug System)

Certigna root CA 证书

在 Red Hat build of OpenJDK 21.0.1 中,cacerts truststore 包括 Certigna root 证书:

  • 名称:Certigna (Dhimyotis)
  • 别名名称:certignarootca
  • 区分名称: CN=Certigna Root CA, OU=0002 48146308100036, O=Dhimyotis, C=FR

请参阅 JDK-8314960 (JDK Bug System)

增加 jdk.jar.maxSignatureFileSize 系统属性的默认值

红帽构建的 OpenJDK 21.0.0 引入了 jdk.jar.maxSignatureFileSize 系统属性,用于配置 Java 归档(JAR)文件(JDK-8300596)中允许签名相关文件的最大字节数。默认情况下,jdk.jar.maxSignatureFileSize 属性被设置为 8000000 字节(8 MB),对于某些 JAR 文件来说太小。

红帽构建的 OpenJDK 21.0.1 将 jdk.jar.maxSignatureFileSize 属性的默认值增加到 16000000 字节(16 MB)。

请参阅 JDK-8312489 (JDK Bug System)

第 7 章 与本发行版本相关的公告

以下公告包括了记录程序错误修复和 CVE 修复:

更新于 2023-12-15

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.