JDK 22リリースにおける重要な変更

JDK 22の新機能と拡張機能、およびAPI仕様の詳細は、JDK 22リリース・ノートを参照してください。

Java SE 22およびJDK 22の更新内容の一部を次に示します:

言語機能

  • 無名変数および無名パターンは、変数宣言やネストされたパターンが必要だが、まだ使用されていない場合に使用できます。無名パターンは、レコード・パターンのパターン・リストに出現することがあり、タイプ・パターンのかわりに使用できます。両方ともアンダースコア文字(_)で示します。

    JEP 456: 無名変数およびパターンに関する項、および『Java Platform, Standard Edition Java言語更新』無名変数およびパターンに関する項を参照してください。

プレビュー言語機能

  • コンストラクタでは、明示的なコンストラクタ呼出しの前に作成されるインスタンスを参照しない文を追加できます。この機能を使用すると、自明でない計算を実行することでスーパークラス・コンストラクタの引数を準備したり、スーパークラス・コンストラクタに渡す引数を検証できます。

    JEP 447: super(...)の前の文 に関する項、および『Java Platform, Standard Edition Java言語更新』super(...)の前の文に関する項を参照してください。

  • 文字列テンプレートは、リテラル・テキストと埋込み式およびテンプレート・プロセッサを結合して特殊な結果を生成することにより、Javaの既存の文字列リテラルおよびテキスト・ブロックを補完します。埋込み式は、文字列テンプレートのリテラル・テキストと区別する追加の構文を持つJava式です。テンプレート・プロセッサは、テンプレートのリテラル・テキストを埋込み式の値と組み合せて結果を生成します。

    JEP 459: 文字列テンプレート(第2プレビュー)に関する項、および『Java Platform, Standard Edition Java言語更新』文字列テンプレートに関する項を参照してください。

  • プレビュー機能「インスタンスのmainメソッド」と「暗黙的に宣言されたクラス」により、受講者は大規模なプログラム用に設計されたすべての言語機能を理解しなくても、最初のプログラムを作成できます。単一クラス・プログラムの合理化された宣言を記述し、スキルの向上に合せてより高度な機能を使用するようにプログラムをシームレスに拡張できます。

    JEP 463: 暗黙的に宣言されたクラスおよびインスタンスのmainメソッド(第2プレビュー)に関する項、および『Java Platform, Standard Edition Java言語更新』暗黙的に宣言されたクラスおよびインスタンスのmainメソッドに関する項を参照してください。

プレビュー機能の詳細は、『Preview Language and VM Features』を参照してください。

ライブラリの改善

  • 外部関数およびメモリー(FFM) APIを使用すると、JavaプログラムはJavaランタイムの外部のコードおよびデータと相互運用できます。このAPIにより、Javaプログラムは、JNIの脆弱性と危険性を伴わずにネイティブ・ライブラリをコールしてネイティブ・データを処理できます。このAPIは、外部関数(JVM外のコード)を起動し、外部メモリー(JVMで管理されていないメモリー)に安全にアクセスします。

    JEP 454: 外部関数およびメモリーAPIに関する項、および『Java Platform, Standard Editionコア・ライブラリ』外部関数およびメモリーAPIに関する項を参照してください。

ライブラリ改善プレビューおよびインキュベーター

  • Stream Gatherersを使用すると、カスタムの中間操作を作成できます。これにより、ストリーム・パイプラインは、既存の組込み中間操作では困難だった方法でデータを変換できるようになります。

    JEP 461: Stream Gatherers (プレビュー)に関する項、および『Java Platform, Standard Editionコア・ライブラリ』Stream Gatherersに関する項を参照してください。

  • クラス・ファイルAPIは、Javaクラス・ファイルの解析、生成および変換に使用されます。

    JEP 457: クラス・ファイルAPI (プレビュー)に関する項、および『Java Platform, Standard Edition Java仮想マシン・ガイド』クラス・ファイルAPIに関する項を参照してください。

  • 構造化並行性は、異なるスレッドで実行されている複数のタスクを1つの作業単位として処理することにより、エラーの処理と取消しを合理化し、信頼性と可観測性を向上させます。

    JEP 462: 構造化並行性(第2プレビュー)に関する項、および『Java Platform, Standard Editionコア・ライブラリ』構造化並行性に関する項を参照してください。

  • スコープ値を使用すると、スレッド内およびスレッド間で不変データを共有できます。多数の仮想スレッドを使用する場合は特に、スレッド・ローカル変数よりもこちらをお薦めします。

    JEP 464: スコープ値(第2プレビュー)に関する項、およびJava API仕様のScopedValueクラスを参照してください。

  • 実行時に、サポートされているCPUアーキテクチャ上で最適なベクトル命令に確実にコンパイルするベクトル計算を表現するために、Vector APIが導入されています。これにより、同等のスカラー計算よりも優れたパフォーマンスを実現できます。JEP 460: ベクターAPI (第7インキュベータ)に関する項を参照してください。

プレビュー機能およびインキュベーションAPIの詳細は、『JEP 12: Preview Features』および『JEP 11: Incubator Modules』を参照してください。

パフォーマンスの向上

G1の領域固定によって待機時間が短縮されるため、Java Native Interface (JNI)クリティカル領域でガベージ・コレクションを無効にする必要はありません。

JEP 423: G1の領域固定に関する項、および『Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイド』退避の失敗に関する項を参照してください。

ツール

Javaアプリケーション・ランチャは、Javaソース・コードの複数のファイルとして提供されるプログラムを実行するように拡張されています。これにより、小規模なプログラムから大規模なプログラムへの段階的な移行が可能になります。

JEP 458: 複数ファイルのソース・コードのプログラムの起動に関する項を参照してください。

削除されたAPI、ツールおよびコンポーネント

削除および非推奨の詳細は、「JDK 22で削除および非推奨となった機能およびオプション」を参照してください。

また、注意が必要なセキュリティ関連の更新もあります。「JDK 22でのセキュリティ・アップデート」を参照してください。