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
文のパターンを受け入れるすべての構文で、汎用レコード・パターンの型引数の型を推測できます。
- プレビュー機能であるレコード・パターンが、次のようにさらに改善されています:
- コンパイラは、汎用レコード・パターンの型引数の型を推測できます。
- レコード・パターンは、拡張
for
文に指定できます。 - 名前付きレコード・パターンはサポートされなくなりました。
プレビュー機能の詳細は、『Preview Language and VM Features』を参照してください。
ライブラリの変更点
- プレビューであるAPI外部関数およびメモリーAPIは、次のようにさらに改善されています:
MemorySegment
抽象化とMemoryAddress
抽象化が統合されました(現在メモリー・アドレスは長さがゼロのメモリー・セグメントによってモデル化されます)。- シールされた
MemoryLayout
階層が拡張され、switch式および文でのパターン・マッチングで使用しやすくなりました。「switch式および文のパターン・マッチング」を参照してください MemorySession
が、ArenaとSegmentScope
に分割され、メンテナンス境界にまたがったセグメントの共有が促進されます
削除されたAPI、ツールおよびコンポーネント
削除および非推奨の詳細は、「JDK 20で非推奨となった機能およびオプション」を参照してください。
また、注意が必要なセキュリティ関連の更新もあります。「JDK 20でのセキュリティ・アップデート」を参照してください。