马士兵java架构师

您现在的位置是:架构师动态 >

架构师动态

[最新]Java 21中的功能弃用:Windows 32 位 x86 端口&动态加载代理

2023-11-22 14:06:11架构师动态 本文浏览次数:1 百度已收录

本 文 目 录

一、引言

随着技术的不断进步和用户需求的变化,每个软件版本都会带来一些新的功能和改进。然而,有时候也需要弃用一些旧的功能,以适应未来的发展。Java 21就是这样一个版本,它在为开发者带来诸多新特性的同时,也宣布了一些功能的弃用。本文将详细介绍Java 21中弃用的功能,并探讨这些弃用对开发者和应用程序的影响。

Java 21中的功能弃用:Windows 32 位 x86 端口&动态加载代理

二、Windows 32位x86支持弃用

在Java 21中,一个重要的变更是弃用了对Windows 32位x86的支持。这一决策背后主要原因是技术的进步和官方的支持策略变化。随着64位系统的普及,32位系统的使用率逐渐下降,而且官方对32位Windows的支持也将在不久的将来结束。因此,Java 21决定在未来的版本中删除对Windows 32位x86的支持

该功能只是被弃用,而不是被删除,因此 OpenJDK 团队添加了新的配置选项(如错误所示),--enable-deprecated-ports=yes仍然允许配置。但是,会发出警告以强调弃用和未来可能的删除。

$ 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.

这一弃用决策对未来的影响和旧系统的使用情况是开发者需要重视的。虽然旧系统在升级之前仍然可以使用之前的Java版本,但开发者需要意识到未来版本的变更,并及早做好迁移和兼容性测试工作,以确保应用程序在目标环境中的稳定运行。

三、动态加载代理弃用

除了对Windows 32位x86的支持外,Java 21还弃用了动态加载代理的功能。动态加载代理允许开发者使用Instrumentation API动态修改已加载的字节码,从而改变应用程序的行为。然而,这种动态性也带来了安全上的风险和稳定性问题。

com.sun.tools.attach.AgentLoadException: Failed to load agent library: \
Dynamic agent loading is not enabled. Use -XX:+EnableDynamicAgentLoading \
to launch target VM.

为了推动更安全、更稳定的开发实践,Java 21决定弃用动态加载代理功能。这一变更将促使开发者采用更可靠的替代方案,并加强对应用程序的安全性和稳定性的关注。对于之前依赖动态加载代理功能的开发者来说,他们需要尽快评估和调整自己的代码,以适应这一变化,并确保应用程序不受影响。

在 Java 21 中,您仍然可以加载动态代理,但 JVM 会生成多个警告,通知您潜在的问题以及如何隐藏这些警告:

WARNING: A {Java,JVM TI} agent has been loaded dynamically (file:/path/to/agent.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release

总结 Java 21中的功能弃用是为了适应技术进步和安全稳定性的需求。开发者需要认真对待这些变更,并及时调整自己的应用程序和开发实践,以确保在Java 21及未来版本中的顺利运行。同时,我们也鼓励开发者持续关注Java的后续版本和发展动态,保持对新技术和新特性的敏感度和探索精神,以更好地应对不断变化的软件开发环境。