跳到主要内容

JEP 388:Windows/AArch64 端口

概括

将 JDK 移植到 Windows/AArch64。

动机

随着新的消费级和服务器级 AArch64 (ARM64) 硬件的发布,Windows/AArch64 由于最终用户的需求而成为重要的平台。

描述

通过扩展之前为 Linux/AArch64 端口所做的工作(JEP 237 ),我们已将 JDK 移植到 Windows/AArch64。该端口包括模板解释器、C1 和 C2 JIT 编译器以及垃圾收集器(串行、并行、G1、Z 和 Shenandoah)。它支持Windows 10和Windows Server 2016操作系统。

此 JEP 的重点不是移植工作本身(该工作已基本完成),而是将移植集成到 JDK 主线存储库中。

目前,我们有十几个变更集。我们将对共享代码的更改保持在最低限度。我们的更改将对 AArch64 内存模型的支持扩展到 Windows,解决一些 MSVC 问题,向 AArch64 端口添加 LLP64 支持,并在 Windows 上执行 CPU 功能检测。我们还修改了构建脚本以更好地支持交叉编译和 Windows 工具链。

新平台代码本身仅限于 15 (+4) 个文件和 1222 行 (+322)。

抢先体验的二进制文件可在此处获取。

测试

我们对 AArch64 测试系统进行了全面的功能、性能和回归测试,包括 Ampere eMAG1s、Marvell ThunderX2s(SMT 打开和关闭)和 Surface Pro Xs。我们的测试套件包括 JTReg、JCStress、jmh-jdk-microbenchmarks、JFC 应用程序和小程序 (demo/jfc)、SPECJBB2005、SPECJBB2015、SPEC SERT、SPECJVM2008、DaCapo 和一些较小的基准测试。其中两个测试矩阵有详细记录:JTRegSPECJBB2015

除了 AArch64 系统之外,我们还在 x64 系统(Intel Skylakes)上测试了我们的补丁。我们的测试覆盖范围包括 Linux/AArch64、Windows/AArch64、Windows/x64,以及仅用于功能测试的 Linux/x64。

我们有一个强大的 CI 用于功能测试,并且当我们做出进一步的更改时,将继续通过 CI 运行我们的补丁。

风险和假设

  • 我们对 Linux/AArch64 后端中的共享代码进行了更改,以扩展 LP64(64 位长整型和指针),以适应64 位 Windows 平台所需的长整型和指针 (LLP64) 。

  • 如上所述,我们还修改了 Windows 上的共享代码。

  • 我们需要重新设计寄存器 x18 的使用,该寄存器在 Windows/AArch64 上用于 Windows 线程环境块 (TEB)。我们正在与 AArch64 Port 项目的负责人合作,寻找一个优雅的解决方案。