Skip to content

JEP 449: Deprecate the Windows 32-bit x86 Port for Removal | 废弃 Windows 32 位 x86 端口以待移除

摘要

弃用 Windows 32 位 x86 端口,并计划在未来版本中移除。

目标

  • 当尝试为 Windows 32 位 x86(x86-32)配置构建时,更新构建系统以发出错误消息。该错误消息可通过新的配置选项来抑制。

  • 在相关文档中,将该端口及相关的特定于端口的特性标记为已弃用,以便将来移除。

非目标

  • 在任何先前版本中更改受影响端口的状态并非目标。此 JEP 可能针对的最早版本是 JDK 21。

  • 弃用任何其他 32 位端口并非目标。

动机

  • 允许 OpenJDK 社区的贡献者加速开发新功能和增强功能,以推动平台的发展。

  • Windows x86-32 的 JEP 436(虚拟线程) 实现回落到使用内核线程,因此无法带来 Project Loom 的预期效益。

  • Windows 10 是最后一个支持 32 位操作的 Windows 操作系统,将于 2025 年 10 月 终止支持。

描述

尝试配置 Windows x86-32 构建将产生以下输出:

shell
$ bash ./configure
...
checking compilation type... native
configure: error: The Windows 32-bit x86 port is deprecated and may be removed in a future release. \
Use --enable-deprecated-ports=yes to suppress this error.
configure exiting with result code 1
$

新的构建配置选项 --enable-deprecated-ports=yes 将抑制错误并继续:

shell
$ bash ./configure --enable-deprecated-ports=yes
...
checking compilation type... native
configure: WARNING: The Windows 32-bit x86 port is deprecated and may be removed in a future release.
...
Build performance summary:
* Cores to use:   32
* Memory limit:   96601 MB

The following warnings were produced. Repeated here for convenience:
WARNING: The Windows 32-bit x86 port is deprecated and may be removed in a future release.
$

替代方案

另一种选择是继续支持 Windows x86-32。这将需要积极的维护者,他们可以提供虚拟线程的可持续且高性能的实现,以及未来的 JEP,以确保 Windows x86-32 上的 JDK 继续满足 Java 开发者的期望。

风险与假设

由于与 32 位本地库(DLL)的集成,Windows 上仍在使用 32 位 JVM。其用户无法直接迁移到 64 位 JVM,因为 Windows 上的 64 位进程无法加载 32 位 DLL。虽然 Windows x64 能够通过 WOW64 模拟 32 位环境来运行 32 位应用程序,但应用程序的性能会 大幅下降,尽管内存占用有所减少。

因此,我们假设:

  • 用户可以继续运行 Windows 32 位 JVM 的现有构建,以与本地 32 位库集成,并在必要时通过远程 API 暴露 32 位功能,以供同一环境中运行在 64 位 JVM 上的应用程序使用;

  • 遗留系统不太可能迁移到 Java 21 发布之后的 JDK 版本。