Java 23 が正式にリリースされました。これは非 LTS (長期サポート) リリースです。短期間のバージョンではありますが、Java 23 にはエキサイティングな改善、バグ修正が満載されており、また、注意を払う必要がある削除された機能やオプションも含まれています。
新機能と、それが JDK 21 や JDK 22 などの前のバージョンの機能にどのように基づいて構築されているかについて詳しく見てみましょう。
JDK 23 で最も期待されている機能の 1 つは、スコープ指定された値 (プレビュー) です。この機能は、JDK 22 と JDK 21 の両方でプレビューされており、メソッドがスレッドおよび子スレッド間で不変データを共有する方法を簡素化します。以前の Java バージョンでは、スレッドローカル データの処理が面倒でメモリを大量に消費する可能性がありました。スコープ付きの値は、より効率的でオーバーヘッドの低い代替手段を提供することでこの状況を変えます。
JDK 23 の違いは何ですか? ScopedValue.callWhere() メソッドは、新しい関数インターフェイスを使用するようになりました。これにより、チェック例外がスローされるかどうかをコンパイラーが推測しやすくなります。これにより、ScopedValue.getWhere() メソッドも削除され、API がさらに合理化されました。
これは以前のリリースで見られた改善の継続であり、スコープ付きの値が永続的な機能に向けて進化しているのを見るのは興味深いことです。
Java の同時実行モデルは常に強力ですが、管理が困難です。 構造化同時実行 (プレビュー) は、JDK 21 で初めて登場し、JDK 23 で 3 回目のプレビューに達しました。ここでのアイデアは、異なるスレッドで実行されている関連タスクを 1 つのグループにグループ化することで、同時プログラミングをより直観的にすることです。単一の作業単位。これにより、エラー処理が簡素化され、キャンセル プロセスの信頼性が向上します。
JDK 23 では、構造化同時実行機能はプレビュー段階にありますが、引き続き同時実行コードの推論が容易になり、エラーが発生しにくくなります。 JDK 21 または JDK 22 のプレビューを使用したことがある場合は、この機能がどのように成熟したかを理解するでしょう。スレッド リークなどの一般的な同時実行の問題に対処する機能が強化され、信頼性の高いマルチスレッド コードを簡単に作成できるようになりました。
もう 1 つの歓迎すべき追加機能は、フレキシブル コンストラクター ボディ (プレビュー) です。 JDK 22 で「super() の前のステートメント」として最初にプレビューされたこの機能により、開発者はスーパークラス コンストラクターを呼び出す前に初期化コードを作成できます。この一見小さな変更により、コンストラクター ロジックがより明確になり、検証やその他のセットアップ ロジックが失敗した場合に不必要なオブジェクトが作成されるのを防ぐことができます。
JDK 22 では、この機能は開発者がコンストラクター ロジックをより詳細に制御できるようにするために導入されました。JDK 23 の 2 番目のプレビューでは引き続きその機能が改良されています。初期化ロジックをスーパークラス呼び出しの前に移動することにより、開発者は、これまでコードベースを乱雑にしていた乱雑な補助静的メソッドや中間コンストラクターを回避できます。
Java を教えている人や簡単なスクリプトを書いている人にとって、暗黙的に宣言されたクラスとインスタンス メソッドは、JDK 21 で導入されて以来、大きな変革をもたらしてきました。この機能により、初心者は理解する必要がなく、簡素化された Java プログラムを作成できます。最初から複雑な言語機能を備えています。
JDK 23 では、この機能にいくつかの追加のアップグレードが行われます。現在、暗黙的に宣言されたクラスは、単純なテキスト I/O 用の 3 つの静的メソッドを自動的にインポートできるようになり、必要に応じて java.base モジュールのすべてのパブリック トップレベル クラスとインターフェイスもインポートされます。これらの機能強化により、初心者の学習曲線がさらにスムーズになります。
JDK 23 の新しいプレビュー機能の 1 つは、モジュール インポート宣言です。この機能を使用すると、モジュールによってエクスポートされたすべてのパッケージを 1 つのステートメントでインポートできるため、モジュール ライブラリの再利用が簡素化されます。これは、パッケージが階層内のどこにあるかを覚える必要がなくなった初心者にとって特に便利で、複数の type-import-on-demand 宣言によって引き起こされる混乱を軽減します。
これは JDK 23 の新しい機能ですが、特にモジュラー プログラミングを初めて使用する人にとって、Java のモジュール システムをよりアクセスしやすくする上で大きな期待が持てます。
正直に言うと、HTML と @ タグを使用して JavaDoc を記述するのは面倒な場合があります。 JDK 23 では、Markdown Documentation Comments (プレビュー) 機能により、開発者は Markdown を使用して API ドキュメントを作成でき、読みやすく適切にフォーマットされたコメントを簡単に作成できるようになります。
これは JDK 23 の新機能ですが、何年も前に追加されるべきものでした。 Markdown は開発者コミュニティで広く使用されており、これを JavaDoc に導入すると、ドキュメントの作成と保守がはるかに簡単になります。
JDK 15 での導入以来、Z ガベージ コレクター (ZGC) を使用している場合は、JDK 23 では ZGC がデフォルトで 世代別になったことを知って興奮するでしょう。モード (JEP 474)。このスイッチは、存続期間の短いオブジェクトの頻繁な収集に重点を置くことにより、アプリケーションのパフォーマンスを向上させます。非世代別 ZGC はこのリリースで非推奨になりましたが、これは世代別アプローチが Java のガベージ コレクションの将来であることを示す明らかな兆候です。
JDK 22 以前で実行している場合は、JDK 23 に移行すると、大きな労力をかけずにパフォーマンスが大幅に向上するはずです。
JDK 16 で導入された Vector API を使用すると、開発者は実行時に最適なベクトル命令にコンパイルするベクトル計算を実行できます。 API は進化し続けており、JDK 23 では 8 番目のインキュベーター が登場しています。この API はまだ開発中です。つまり、まだ完成した機能ではありませんが、徐々に完成に近づいています。
パフォーマンスが重要なアプリケーション、特に大規模なデータセットを扱うアプリケーションの場合、Vector API は大幅な高速化を実現できます。以前のインキュベーション (JDK 22 など) でこれを使用したことがある場合は、現在はさらに安定していることがわかりますが、最終的な部分が所定の位置に収まるのをまだ待っています (おそらく Project Valhalla に関連しています)。
JDK 22 では、カスタム中間操作を可能にすることで Stream API に柔軟性を追加する機能である Stream Gatherer (プレビュー) が導入されました。 JDK 23 では、2 番目のプレビューに戻ってきました。ストリームを使用してデータを処理するのが好きなら、これまで実現が困難だった方法でデータ パイプラインを変換できるこの機能の機能を高く評価するでしょう。
ストリーム ギャザラーはストリームの能力を拡張し、開発者が特に無限ストリームやカスタム変換を扱う場合に、より複雑なシナリオを簡単に処理できるようにします。
Java クラス ファイルを操作するツールを構築している場合は、JDK 23 の クラス ファイル API (プレビュー) が最適です。 JDK 22 で初めて導入されたこの API は、ASM などのサードパーティ ライブラリを必要とせずにクラス ファイルを解析および生成する標準的な方法を提供します。 JDK 23 の 2 番目のプレビューでは、この API が改良され、より合理化され、操作しやすくなりました。
ツール開発者にとって、これは大きな問題です。 JVM 仕様が変更されるたびに慌ててライブラリを更新する必要はもうありません。Java にはファーストパーティのソリューションが用意されています。
Java 23 は LTS リリースではないかもしれませんが、JDK 21 および JDK 22 で導入されたものに基づいて構築されたエキサイティングな機能が満載です。スコープ指定された値や構造化された同時実行性から、より優れたガベージ コレクターやストリームとコンストラクターの改善に至るまで、このリリースは Java 開発を前進させます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3