OracleはJavaプログラミング言語と仮想マシンのバージョン 16をリリースした。
InfoQは、2020年11月に最初にこのリリースについて報告したが、それ以降リリースに実質的な変更はない。
最終的な機能リストは次の通り:
- JEP 338: ベクターAPI (Incubator)
- JEP 347: C++ 14の言語機能の有効化
- JEP 357: MercurialからGitへの移行
- JEP 369: GitHubへの移行
- JEP 376: ZGC: 並行スレッドスタック処理
- JEP 380: Unixドメインソケットチャネル
- JEP 386: Alpine Linux対応
- JEP 387: Elastic Metaspace
- JEP 388: Windows/AArch64対応
- JEP 389: Foreign Linker API (Incubator)
- JEP 390: 値ベースクラスの警告
- JEP 392: パッケージングツール
- JEP 393: 外部メモリアクセスAPI (3番目のIncubator)
- JEP 394: instanceofのパターンマッチング
- JEP 395: Records
- JEP 396: デフォルトでJDK内部を強力にカプセル化
- JEP 397: Sealed Classes (2番目のプレビュー)
以前のリリースと機能ケイデンスは同じままで、Java 16で提供された17の機能と、Java 14で提供されたJava 15と16の機能のための14の機能がある。
Oracleは、Java 16で修正された問題の3分の2強を担当し、Red Hat、SAP、Tencent、およびARMがOracle以外では最大の貢献者になった。
重要な注意点の1つは、ASMバイトコード操作ライブラリに依存しているため、人気のビルドツールであるGradleはまだJava 16と互換性がないことだ。これは今後数週間で修正される予定で、JDK自体にユーザアクセス可能な汎用のバイトコード操作フレームワークがないことに起因している。現在のところ、Gradleユーザは回避策がなく、Java 16にアップグレードすることはできない。
Java 16は長期サポートリリースではなく、2021年9月に次のリリースであるJava 17 (LTSリリース) によって廃止される予定だ。
現在、Java 17を対象としているJEPは2つだけだ:
- JEP 356: 強化された疑似乱数ジェネレータ
- JEP 382: 新しいmacOSレンダリングパイプライン
さらに2つのJEPが対象に提案された:
- JEP 391 macOS/AArch64ポート
- JEP 398 削除に向けてApplet APIの非推奨化
また、現在プレビューおよびインキュベーター (Incubator) 機能の一部はJava 17の一部としてプロダクションに到達する可能性が非常に高い。特に、次の両方のJava 16 JEPが次回最終リリースになる可能性がある:
- 外部メモリアクセス (Foreign-Memory Access) API
- Sealed Classes
ただし、これはOracleにまだ確認していない。
さらに、最近の数週間、Project Valhallaの基本的なメカニズムに関連するいくつかのドラフトJEPが提出または更新されたが、これらのJEPは、最初に少なくとも1回 (場合によっては数回) のインキュベーションがなければ、最終状態で提供されることは期待できない 。
Java 17のリリース日はまだ発表されていないが、2021年6月中旬に機能が凍結され、9月中旬に提供される予定だ。
Java 16は現在Oracleからダウンロードでき、他のベンダのバイナリも数日中に利用可能になる予定だ。