跳到主要内容

JEP 297:统一的 arm32/arm64 端口

QWen Max 中英对照

概述

将 Oracle 贡献的 HotSpot 的 arm32 和 arm64 统一端口集成到 JDK 中。

动机

主要动机是在 JDK 中提供 arm32/aarch32 支持。虽然已经有一些支持 arm32/aarch32 的努力,但目前在 JDK 中唯一维护的选项是 Zero port。Oracle 的贡献为 ARM 提供了完整的 C1 和 C2 支持,使其与其他架构持平。

该端口还提供了对 arm64/aarch64 的支持,但由于 JDK 已经包含了一个仅限 aarch64 的端口,因此这方面的动机较少。

描述

Oracle 提供的支持贡献为 arm32 和 arm64 都提供了 C1 和 C2 支持。该代码已被合并到 aarch32 项目区域中的一个单独存储库内的 JDK 9 树中。

Oracle 于 2016 年 8 月 23 日在 aarch32 邮件列表中宣布了开源 ARM 移植版本的计划,并且在 aarch32 邮件列表中已经有一些讨论主题。请通过以下链接查看这些讨论内容。

在 2016 年 10 月 21 日(星期五)的公开电话会议上,我们一致同意应该努力将此项内容包含到 JDK 中。会议没有正式记录,但会议笔记已发布到 aarch32 列表

Oracle 贡献的 webrev 可在以下地址获取:http://cr.openjdk.java.net/~bobv/arm3264/webrev,合并后的 jdk9 代码树可在以下地址获取:http://hg.openjdk.java.net/aarch32-port/jdk9-arm3264。

合并后的树能够为 arm32 或 arm64 构建最小的、客户端或者服务端虚拟机。该树还能够构建现有的 aarch64 端口。

还有一个特定于 ARM 的选项 --with-cpu-port,可以用来指定新的 aarch64 构建 --with-cpu-port=arm64 或现有的 aarch64 构建 --with-cpu-port=aarch64。如果未指定选项,则构建默认为现有的 aarch64 构建。

预计 aarch64 的默认构建将仍然是现有的 aarch64 构建。

测试

由于该端口是 Oracle 专有虚拟机的一部分,因此它已由 Oracle 内部进行测试。因此,它已经通过了 JPRT 和其他内部测试的验证。

在 aarch32 项目中,使用 jtreg 对 JDK 9 代码树进行了多种配置的测试,包括硬/软浮点、发行版/调试版本以及客户端/服务器版本。在合并的源代码中发现了一些问题,但这些问题已经得到修复。

风险

对共享代码的更改已保持在最低限度。贡献的移植与 aarch64 移植共享 #ifdefs。此外,ARM 的 #ifdefs 已经存在于共享代码中。这意味着对共享代码的更改仅限于构建更改和 libproc.h 中的单个 #ifdef

由于这些来源源自 Oracle 内部的闭源端口,因此它们在 Oracle 内部是已知的,这大大降低了将其合并到 JDK 中的相关风险。

对于构建 JDK 的人员来说,存在一个混淆的风险,因为将会有两个 aarch64 端口,即现有的 aarch64 端口和统一的 arm32/arm64 端口。