JDK 16リリースにおける重要な変更
JDK 16の新機能と拡張機能、およびAPI仕様の詳細は、JDK 16リリース・ノートを参照してください。
Java SE 16およびJDK 16の更新内容の一部を次に示します:
- Javaプログラミング言語は、
instanceof
演算子のパターン一致で拡張されています。この機能を使用すると、プログラム内の共通ロジック(オブジェクトからのコンポーネントの条件付き抽出)をより簡潔かつ安全に表現できます。JEP 394: instanceofのパターン一致に関する項および『Java Platform, Standard Edition Java言語更新』のinstanceofのパターン一致に関する項を参照してください。 - Java SE 14で最初にプレビューされたレコードは、このリリースの永続的な機能です。以前の制限は緩和されており、内部クラスは明示的または暗黙的に静的なメンバーを宣言できます。これには、暗黙的に静的なレコード・クラス・メンバーが含まれます。JEP 395: レコードに関する項および『Java Platform, Standard Edition Java言語更新』ガイドのレコード・クラスに関する項を参照してください。
- デフォルトでは、
sun.misc.Unsafe
などの重要な内部APIを除き、JDKのすべての内部要素が強くカプセル化されます。JDK 9以降、デフォルトになっている緩和された強力なカプセル化を選択できます。JEP 396: デフォルトでのJDK内部の強力なカプセル化に関する項および「JDK内の強力なカプセル化」を参照してください。 - UNIXドメイン・ソケット・チャネルがJDK 16に統合されました。JEP 380: UNIXドメイン・ソケット・チャネルに関する項および『Java Platform, Standard Editionコア・ライブラリ』のインターネット・プロトコルとUNIXドメイン・ソケットのNIOの例に関する項を参照してください。
- Zガベージ・コレクタはスレッド・スタックを同時に処理します。これにより、JVM内のすべてのルートを同時にZGCで処理できます。JEP 376: ZGC: 同時スレッド・スタック処理に関する項および『Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイド』のZガベージ・コレクタに関する項を参照してください。
- JDK 14で導入された
jpackage
ツールは、現在永続的な機能です。このツールは、必要な依存関係を含むプラットフォーム固有のパッケージにJavaアプリケーションをパッケージ化します。JEP 392: パッケージング・ツールに関する項および『Java Platform, Standard Editionパッケージング・ツール・ユーザーズ・ガイド』を参照してください。 - エラスティック・メタスペースは、VM内部のメタスペースおよびクラス・スペース実装を改善したものです。未使用のHotSpotクラス・メタデータ(メタスペース)メモリーがオペレーティング・システムに返されます。メンテナンス・コストを削減するために、メタスペース・フットプリントを削減し、メタスペース・コードを簡略化します。JEP 387: エラスティック・メタスペースに関する項を参照してください。
機能およびインキュベータ・モジュールのプレビュー
プレビュー機能の詳細は、Java言語のプレビュー機能を参照してください。
- シール・クラス(JDK 15のプレビュー機能)は、このリリースで再プレビューされます。シール・クラスおよびインタフェースは、それらを拡張または実装できる他のクラスまたはインタフェースを制限します。このリリースには、コンテキスト・キーワードとしての文字シーケンス
sealed
、non-sealed
およびpermits
の導入など、いくつかの改良点があります。JEP 397: シール・クラス(2度目のプレビュー)に関する項および『Java Platform, Standard Edition Java言語更新』のシール・クラスに関する項を参照してください。 - ベクター計算を表すために、インキュベータ・モジュール
jdk.incubator.vector
の初期反復が提供されています。実行時に、サポートされているCPUアーキテクチャで最適なベクター・ハードウェア命令に確実にコンパイルされるため、同等のスカラー計算に対して優れたパフォーマンスが実現されます。JEP 338: ベクターAPI (インキュベータ)に関する項を参照してください。 - 静的に型を指定した、ネイティブ・コードへのpure-Javaアクセスを提供する外部リンカーAPIが導入されました。このAPIは、外部メモリー・アクセスAPI (JEP 393)とともに、ネイティブ・ライブラリへのバインドに関する他のエラーが発生しやすいプロセスを簡略化します。JEP 389: 外部リンカーAPI (インキュベータ)に関する項を参照してください。
- 外部メモリー・アクセスAPIを使用すると、JavaプログラムはJavaヒープ外の外部メモリーに効率的かつ安全にアクセスできます。JEP 393: 外部メモリー・アクセスAPI (サード・インキュベータ)に関する項を参照してください。