跳到主要内容

JEP 297:统一arm32/arm64端口

概括

将Oracle提供的HotSpot for arm32和arm64的统一端口集成到JDK中。

动机

主要动机是在 JDK 中提供 arm32/aarch32 支持。尽管已经做出了一些支持arm32/aarch32的努力,但今天JDK中唯一维护的选项是零端口。 Oracle 的贡献为 ARM 提供了完整的 C1 和 C2 支持,使其与其他架构相媲美。

该移植还提供对arm64/aarch64的支持,但这并不是什么动机,因为JDK已经包含了仅aarch64的移植。

描述

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

Oracle 有意开源 ARM 端口,已于 2016 年 8 月 23 日在 aarch32 邮件列表上宣布,并且 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构建最小的客户端或服务器VM。该树还可以构建现有的 aarch64 端口。

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

aarch64 的默认构建将保留现有的 aarch64 构建。

测试

该端口已经过 Oracle 内部测试,因为它是 Oracle 专有 VM 的一部分。因此,它已经过 JPRT 和其他内部测试的测试。

aarch32 项目中的 JDK 9 树已经jtreg在各种配置中进行了测试,包括硬/软 FP、发布/调试构建和客户端/服务器构建。合并源中发现了一些问题,这些问题已得到修复。

风险

对共享代码的更改已保持在最低限度。贡献的端口#ifdefs与 aarch64 端口共享。此外,#ifdefsARM 版本已经包含在共享代码中。这意味着对共享代码的更改仅限于构建更改和单个#ifdefin libproc.h.

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

由于存在两个 aarch64 端口,即现有的 aarch64 端口和统一的 arm32/arm64 端口,因此构建 JDK 的人们可能会感到困惑。