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

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

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

同時実行モデルのプレビューおよびインキュベータ

  • 仮想スレッドは、高スループットの同時アプリケーションの書込み、メンテナンスおよびデバッグの労力を減らす軽量スレッドです。これはプレビューAPIです。最後のリリース以降、このAPIに小さな変更が加えられました。「JEP 436: 仮想スレッド(第2プレビュー)」および『Java Platform, Standard Editionコア・ライブラリ』「仮想スレッド」を参照してください。
  • 構造化並行性は、異なるスレッドで実行されている複数のタスクを1つの作業単位として処理することにより、エラーの処理と取消しを合理化し、信頼性と可観測性を向上させます。「JEP 437: 構造化並行性(第2プレビュー)」を参照してください。インキュベーションAPIの詳細は、「JEP 11: インキュベータ・モジュール」を参照してください。
  • スコープ値を使用すると、スレッド内およびスレッド間で不変データを共有できます。多数の仮想スレッドを使用する場合は特に、スレッド・ローカル変数よりもこちらをお薦めします。「JEP 429: スコープ値(インキュベータ)」および「JEP 11: インキュベータ・モジュール」を参照してください。
  • 実行時に、サポートされているCPUアーキテクチャ上で最適なベクトル命令に確実にコンパイルするベクトル計算を表現するために、APIが導入されています。これにより、同等のスカラー計算よりも優れたパフォーマンスを実現できます。「JEP 438: ベクターAPI (第5インキュベータ)」を参照してください。

言語の変更

  • このリリースでは、プレビュー機能であるswitch式および文のパターン・マッチングが、次のようにさらに改善されました:
    • switchラベルが実行時に適用されない場合、enumクラスに対する網羅的なswitch (switch式またはパターンswitch文)によって、IncompatibleClassChangeErrorではなくMatchExceptionがスローされます。
    • switchラベルの文法が単純になりました。
    • コンパイラは、switch文および式、instanceof式、拡張for文のパターンを受け入れるすべての構文で、汎用レコード・パターンの型引数の型を推測できます。
    「JEP 433: switchのパターン・マッチング(第4プレビュー)」および『Java Platform, Standard Edition Java言語更新』「switch式および文のパターン・マッチング」を参照してください。
  • プレビュー機能であるレコード・パターンが、次のようにさらに改善されています:
    • コンパイラは、汎用レコード・パターンの型引数の型を推測できます。
    • レコード・パターンは、拡張for文に指定できます。
    • 名前付きレコード・パターンはサポートされなくなりました。
    「JEP 432: レコード・パターン(第2プレビュー)」および『Java Platform, Standard Edition Java言語更新』「レコード・パターン」を参照してください。

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

ライブラリの変更点

  • プレビューであるAPI外部関数およびメモリーAPIは、次のようにさらに改善されています:
    • MemorySegment抽象化とMemoryAddress抽象化が統合されました(現在メモリー・アドレスは長さがゼロのメモリー・セグメントによってモデル化されます)。
    • シールされたMemoryLayout階層が拡張され、switch式および文でのパターン・マッチングで使用しやすくなりました。「switch式および文のパターン・マッチング」を参照してください
    • MemorySessionが、ArenaとSegmentScopeに分割され、メンテナンス境界にまたがったセグメントの共有が促進されます
    「JEP 434: 外部関数およびメモリーAPI(第2プレビュー)」および『Java Platform, Standard Editionコア・ライブラリ』「外部関数およびメモリーAPI」を参照してください。

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

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

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