検索
ホームページテクノロジー周辺機器AIいじるのはやめてください。これらの機能は Java 21 で非推奨となり削除される予定です。

Java は、私がこれまで使用した中で最も下位互換性のある言語および環境の 1 つですが、機能が非推奨になったり削除されたりする可能性は常にあります。 Java 21 では 2 つの機能が廃止されます。それが今日お話しする内容です。

1 なぜ機能を非推奨にしなければならないのでしょうか?

コードや機能の非推奨とは、その使用が推奨されず、将来のバージョンには存在しない可能性があることを意味します。それが推奨されない理由はたくさんあるでしょう。

非推奨の最も一般的な理由は次のとおりです:

  • これは、より優れた代替手段によって置き換えられました。
  • 設計上の欠陥があり、使用すると危険な場合もあります。ただし、下位互換性があるため、すぐに削除することはできず、まったく削除することもできません。
  • これは冗長であると考えられるため、システムとその使用方法を簡素化するために削除する必要があります。
  • 今後のアップデートにより、古い機能/コードのサポートが不可能/非現実的になります。

根本原因に関係なく、非推奨の機能はまだシステムの一部であるため、少なくとも現時点では引き続き使用できます。

Windows 32 ビット x86 ポートの非推奨

JEP449 は、Windows の 32 ビット x86 サポートを非推奨にし、将来的に完全に削除することを最終目標としています。

この非推奨と将来の削除の背後にある理由は、主に技術的なものです。

Windows 32 ビットのサポート

あらゆるシステムにソフトウェアを提供するには、実際にどのプラットフォームをサポートするかを常に決定する必要があります。サポートされなくなったプラットフォームやバージョンをターゲットにすることは可能ですが、通常はサポートの取り組みを強化したり、バックポートしたり、自分で修正したりすることを意味します。

Windows プラットフォームを例に挙げると、最後の 32 ビット バージョンは 2020 年にリリースされ、公式サポートは 2025 年 10 月に終了しました。

64 ビット Windows が 32 ビット アプリケーションをどのように処理するかを知っている場合は、なぜ Windows に統合された WOW64 エミュレーション層を介して JVM を実行できないのか不思議に思うかもしれません。通常、この方法でアプリケーションを実行することは可能ですが、パフォーマンスは大幅に低下します。

これが、Java の将来のバージョンにのみ影響するため、OpenJDK チームが非推奨を進めることを決定した理由です。古いシステムでは、削除される前のすべての Java バージョンを引き続き使用できます。

Java 21 での直接的な変更の 1 つは、ビルドを構成する機能がデフォルトで無効になっているため、JDK のビルド プロセスに影響します。 bash ./configure を実行しようとすると、エラーが発生します:

...checking compilation type... nativeconfigure: 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

この機能は削除されたのではなく単に非推奨になったため、OpenJDK チームは新しい設定オプションを追加しました (エラーに示されているように)。 --enable-deprecated-ports=yes を使用して構成を引き続き許可します。ただし、非推奨と将来削除される可能性を強調する警告が発行されます。

$ bash ./configure --enable-deprecated-ports=yes...checking compilation type... nativeconfigure: 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 MBThe 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.

仮想 VS カーネル スレッド

Java 21 には素晴らしい新機能が満載で、仮想スレッド (JEP 444) の追加もその 1 つです。これにより、軽量 (仮想) スレッドが導入され、Java で高スループットの同時アプリケーションを処理する方法が大幅に変わる可能性があり、そのようなアプリケーションの作成、保守、監視に必要な労力が軽減されます。従来のプラットフォーム (カーネル) スレッドよりもオーバーヘッドがはるかに少なくなります。

ただし、Windows 32 ビット x86 では、技術的な制限により、この機能はカーネル スレッドにフォールバックする必要があります。基盤となるプラットフォームに欠けている機能は、多くの場合、将来の非推奨や削除の強力な指標となります。

それでも、新しいスレッド コードを作成して使用することはできますが、実際には期待される利点がありません。

非推奨ですが、まだ削除されていません

ご覧のとおり、Windows 32 ビット x86 はいずれにせよ動作しないため、非推奨になるのは理にかなっています。さらに、特定のプラットフォーム向けにビルドすることは引き続き可能ですが、現時点では推奨されていません。したがって、レガシー システムをサポートする必要があり、自分が何をしているのか、その結果がどのようなものかを理解している場合でも、引き続きそれを使用できます。

エージェントの動的読み込みを無効にする

エージェントはインストルメンテーション API を使用して、JVM にロードされているバイトコードを変更することで既存のアプリケーションを変更します。これにより、実際にソース コードを変更せずにアプリケーションの動作を変更できます。これは、プロファイラーや監視ツール (Datadog や YourKit など)、アスペクト指向プログラミングなどでよく使用されます。

エージェントのロード方法

エージェントをロードするには 2 つの方法があります。1 つはパラメータを追加するか呼び出して静的にロードする方法、もう 1 つは実行する方法です。次のコードは別のアプリケーションから動的にロードされます。 -javaagent:agent-to-load.jar-agentlib:optionsjava

import java.lang.management.ManagementFactory;import com.sun.tools.attach.VirtualMachine;public class DynamicAgentLoader {public static void main(String... args) {int pidOfOtherJVM = ...;File agentJar = ...;try {VirtualMachine vm = VirtualMachine.attach(pidOfOtherJVM);vm.loadAgent(agentJar.toAbsolutePath);// ... do your workvm.detach();} catch (Exception e) {// ...}}}

最初のオプションは大きな問題ではありません。これは明らかに JVM エージェントの意図的な使用です。ただし、後者は間接的なものであり、接続された JVM によって制御されない場合があります。

动态加载的问题

Java 平台默认致力于实现完整性,为我们构建应用程序提供强大而坚实的基础。代理的设计考虑到了最好的意图,为您提供(良性)工具的力量。然而,为了确保这种完整性,通过(动态)代理进行检测是一个大问题,因为它们超出了您的直接控制范围,并且可能会对您的应用程序造成严重破坏。这就是为什么您作为应用程序的所有者必须对允许和加载哪些代理做出有意识且明确的决定。

插播一条,如果你近期准备面试跳槽,建议在ddkk.com在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题,还有市面上最全的技术栈500套,精品系列教程,免费提供。

在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 warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future release

未来的Java 版本将默认禁止加载动态代理,并且任何使用Attach API都会引发异常:

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

异常消息包括启用动态代理加载所需的步骤:参数-XX:+EnableDynamicAgentLoading。因此,如果您有意识地决定允许动态代理,那么您仍然可以。

立即禁用动态加载

到目前为止,仅发出警告。但是,您可以完全禁止动态加载 Java 代理。您可以通过使用将(加号)与(破折号/减号)-XX:-EnableDynamicAgentLoading交换的参数来执行此操作,以强化您的应用程序或为即将到来的更改做好准备。+-

2 结论

本文中提到的两个功能的弃用对我来说是有道理的。

Windows 10 32 位 x86 支持是一项技术债务,阻碍了创新,例如利用虚拟线程的全部功能。

动态加载代理严重损害了 Java 平台的完整性,并且存在潜在的安全风险。如果打击者“足够接近”可以连接到另一个 JVM,那么您可能会遇到更大的问题。

尽管如此,我们始终必须意识到将来可能会发生变化或删除的内容,因为我们很可能无法决定它何时发生。Java 通常对弃用和删除时间框架相当慷慨,某些功能可能会弃用数十年,但看不到删除的迹象。所以很自然地,我们是否应该使用已弃用的 API 的问题就出现了。

在我看来,如果可能的话,我们应该尽量避免使用已弃用的 API。随着时间的推移,它正在成为技术债务,最终必须偿还。没有什么比因为不相关的原因而需要升级代码更有压力的了,而且您多年来依赖的一些已弃用的功能最终被删除,使得升级方式比需要的更加复杂。

以上がいじるのはやめてください。これらの機能は Java 21 で非推奨となり削除される予定です。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
迅速なエンジニアリングにおける思考のグラフは何ですか迅速なエンジニアリングにおける思考のグラフは何ですかApr 13, 2025 am 11:53 AM

導入 迅速なエンジニアリングでは、「思考のグラフ」とは、グラフ理論を使用してAIの推論プロセスを構造化および導く新しいアプローチを指します。しばしば線形sを含む従来の方法とは異なります

Genaiエージェントとの電子メールマーケティングを組織に最適化しますGenaiエージェントとの電子メールマーケティングを組織に最適化しますApr 13, 2025 am 11:44 AM

導入 おめでとう!あなたは成功したビジネスを運営しています。ウェブページ、ソーシャルメディアキャンペーン、ウェビナー、会議、無料リソース、その他のソースを通じて、毎日5000の電子メールIDを収集します。次の明白なステップはです

Apache Pinotによるリアルタイムアプリのパフォーマンス監視Apache Pinotによるリアルタイムアプリのパフォーマンス監視Apr 13, 2025 am 11:40 AM

導入 今日のペースの速いソフトウェア開発環境では、最適なアプリケーションパフォーマンスが重要です。応答時間、エラーレート、リソース利用などのリアルタイムメトリックを監視することで、メインに役立ちます

ChatGptは10億人のユーザーにヒットしますか? 「わずか数週間で2倍になりました」とOpenai CEOは言いますChatGptは10億人のユーザーにヒットしますか? 「わずか数週間で2倍になりました」とOpenai CEOは言いますApr 13, 2025 am 11:23 AM

「ユーザーは何人いますか?」彼は突き出した。 「私たちが最後に言ったのは毎週5億人のアクティブであり、非常に急速に成長していると思います」とアルトマンは答えました。 「わずか数週間で2倍になったと言った」とアンダーソンは続けた。 「私はそのprivと言いました

PIXTRAL -12B:Mistral AI'の最初のマルチモーダルモデル-Analytics VidhyaPIXTRAL -12B:Mistral AI'の最初のマルチモーダルモデル-Analytics VidhyaApr 13, 2025 am 11:20 AM

導入 Mistralは、最初のマルチモーダルモデル、つまりPixtral-12B-2409をリリースしました。このモデルは、Mistralの120億個のパラメーターであるNemo 12bに基づいて構築されています。このモデルを際立たせるものは何ですか?これで、画像とTexの両方を採用できます

生成AIアプリケーションのエージェントフレームワーク - 分析Vidhya生成AIアプリケーションのエージェントフレームワーク - 分析VidhyaApr 13, 2025 am 11:13 AM

クエリに応答するだけでなく、情報を自律的に収集し、タスクを実行し、テキスト、画像、コードなどの複数のタイプのデータを処理するAIを搭載したアシスタントがいることを想像してください。未来的に聞こえますか?これでa

金融セクターにおける生成AIの応用金融セクターにおける生成AIの応用Apr 13, 2025 am 11:12 AM

導入 金融業界は、効率的な取引と信用の可用性を促進することにより経済成長を促進するため、あらゆる国の発展の基礎となっています。取引の容易さとクレジット

オンライン学習とパッシブアグレッシブアルゴリズムのガイドオンライン学習とパッシブアグレッシブアルゴリズムのガイドApr 13, 2025 am 11:09 AM

導入 データは、ソーシャルメディア、金融取引、eコマースプラットフォームなどのソースから前例のないレートで生成されています。この連続的な情報ストリームを処理することは課題ですが、

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。