第 3 章 Red Hat build of OpenJDK 功能


最新的 Red Hat build of OpenJDK 17 发行版本可能包括新功能。另外,最新版本可能会增强、弃用或删除来自以前红帽构建的 OpenJDK 17 版本的功能。

注意

有关所有其他更改和安全修复,请参阅 OpenJDK 17.0.14 发行版本

Red Hat build of OpenJDK 的改进

Red Hat build of OpenJDK 17 为最初在以前的 Red Hat build OpenJDK 版本中创建的功能提供改进。

修复 调用dynamic 字符串串联更改操作顺序

OpenJDK 9 到 JEP-280 添加的 Indify String Concatenation 功能按字符串串联表达式被评估的顺序引入了一个回归。Java 语言规范 要求以左到右顺序完全评估操作对象。但是,引入 invokedynamic (indy)调用由 javac 编译器生成,用于评估字符串串联表达式,所有操作对象都会按顺序评估,但不会转换为字符串。在这种情况下,每个操作对象仅在稍后转换为字符串。

例如,请考虑以下代码,其中串联的第三个参数具有将 构建器 的值更改为 "goodbye" 的副作用:

StringBuilder builder = new StringBuilder("good");
return "" + builder + builder.append("bye");

根据前面的例子,在早期版本中,Indify String Contenation 功能不会将第二个参数转换为字符串,直到 builder.append 方法更改了 StringBuilder 对象。在这种情况下,串联会错误地成为 "" + "goodbye" + "goodbye",这会生成 "goodegoodbye" 作为输出。

在 OpenJDK 17.0.14 的 Red Hat 构建中,字符串串联评估和立即将每个参数转换为字符串(按左到右的顺序)。在这种情况下,串联可以正确地变为 "" + "good" + "goode",这会生成 "goodbye" 作为输出。

注意

这个问题的解决方法与使用 OpenJDK 9 之前提供的 javac 编译器版本相同,或使用 -XDstringConcat=inline 命令行选项运行 javac

请参阅 JDK-8273914 (JDK Bug System)

jar 命令的选项,以避免在提取存档时覆盖文件

在以前的 Red Hat build of OpenJDK 版本中,当 jar 工具从存档中提取文件时,jar 工具会在目标目录中使用相同名称来覆盖任何现有文件。

Red Hat build of OpenJDK 17.0.14 添加了一个 new -k (或 --keep-old-files)选项,您可以使用它来确保 jar 工具不会覆盖现有文件。您可以使用短或长格式指定这个新选项。

例如:

  • JAR xkf myfile.jar
  • JAR --extract --keep-old-files --file myfile.jar
注意

在 OpenJDK 17.0.14 的 Red Hat build 中,jar 工具默认保留旧行为。如果您没有明确指定 the -k (or --keep-old-files)选项,jar 工具会自动覆盖具有相同名称的任何现有文件。

请参阅 JDK-8335912 (JDK Bug System) 和 JDK bug system reference ID: JDK-8337499。

IANA 时区数据库更新至 2024b 版本

在 OpenJDK 17.0.14 中,互联网编号分配机构(IANA)时区数据库的树内副本更新至 2024b 版本。这个版本主要关注改进墨西哥、Mongolia 和葡ugal 的历史数据。

对 IANA 数据库的这个更新还包括以下更改:

  • Asia/ChoibalsanAsia/Ulaanbaatar 的别名。
  • 欧洲时间(MET)时区等于中欧时间(CET)。
  • 有些旧的时间 ID 映射到地理位置的名称,而不是固定偏移:

    • 东部标准时间(EST)映射到 美国/巴马, 而不是-5 :00
    • Mountain Standard Time (MST)映射到 America/Phoenix 而不是 -7:00
    • Hawaii Standard Time (HST)被映射到 Pacific/Honolulu 而不是 -10:00

    红帽构建的 OpenJDK 通过保留现有的 fixed-offset 映射来覆盖旧时间 ID 映射的更改。

请参阅 JDK-8339637 (JDK Bug System)

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.