OpenJDK 15リリース、新ガーベジコレクタ「ZGC」「Shenandoah」が正式版

OpenJDK 15リリース、新ガーベジコレクタ「ZGC」「Shenandoah」が正式版

  • マイナビニュース
  • 更新日:2020/09/16
No image

OpenJDKプロジェクトは9月15日(米国時間)、Java開発ツールキットの最新版であるOpenJDK 15をリリースした。JavaおよびJDK(Java Development Kit)の開発は、2017年9月にリリースされたJava 9以降、OpenJDKプロジェクトによって6カ月ごとに新バージョンをリリースする方式が採用されている。OpenJDK 15はJava 15のオープンソース実装であり、この成果物をベースにしてOracleをはじめとする各ディストリビューターよりJava 15対応の実行環境および開発ツールキットが提供される。

Oracle、Java機械学習ライブラリ「Tribuo」を発表

OpenJDK 15の詳細な仕様は、OpenJDKプロジェクトの次のページから参照することができる。

https://openjdk.java.net/projects/jdk/15/

新機能としては、まずこれまでプレビュー扱いだった2つの新しいガーベジコレクタ「ZGC」と「Shenandoah GC」が正式版に昇格された点に注目したい。ZGCは数TBオーダーの巨大なヒープサイズも対応したスケーラブルかつ低レイテンシであることが特徴のGCであり、Java 11より試験的に搭載されていたもの。Shenandoah GCはGCによるアプリケーションの停止時間が極めて小さいという特徴をもったGCで、Red Hatによって開発され、こちらはJava 12で試験的に導入された。これまでは、これらのGCを有効化するためにはコマンドラインオプションで「-XX:+UnlockExperimentalVMOptions」の指定が必要だったが、正式版となったJDK 15以降はこのオプションが不要になる。

JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (Production)
JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector (Production)

言語機能の大きな変更点としては、改行を含んだ文字列リテラルを扱うことができる「テキストブロック」や、他のクラスのバイトコードから直接使用できないクラスを定義可能な「Hidden Classes」などが挙げられる。テキストブロックはJava 13/14でプレビュー版が搭載されていたが、Java 15で正式版となった。

JEP 378: Text Blocks
JEP 371: Hidden Classes

最近のJavaのアップデートでは、前述のGCやテキストブロックのように、影響の大きい新機能はまずプレビュー版として採用し、フィードバックを受けて修正を行った上で正式版に昇格するという方針が取られている。OpenJDK 15では、データの入れ物となるクラスを簡単に実装するための「Records」や、instanceofにおけるパターンマッチング、Javaヒープ外の外部メモリに安全にアクセスするための「Foreign-Memory Access API」、継承/実装できる対象を制限したクラス/インタフェースを定義できる「Sealed Classes」などが、プレビュー版として搭載された(Sealed Classes以外はJDK 14に続く2度目のプレビュー)。

JEP 360: Sealed Classes (Preview)
JEP 375: Pattern Matching for instanceof (Second Preview)
JEP 383: Foreign-Memory Access API (Second Incubator)
JEP 384: Records (Second Preview)

従来のプログラムとの非互換性が懸念される変更としては、SPARCおよびx86_64版Solarisのサポートが廃止された点や、非推奨に指定されていたJavaScriptエンジンのNashornが正式に削除された点、RMI(Remote Method Invocation)オブジェクトの起動をサポートするRMI Activationが"削除予定の非推奨"(Deprecate for Removal)に指定された点、HotSpot VMの最適化手法であるBiased Lockingが非推奨に指定された点などが挙げられる。また、DatagramSocket APIが最新の実装に置き換えられており、これもごく一部のプログラムには影響を与える可能性があるという。

JEP 372: Remove the Nashorn JavaScript Engine
JEP 373: Reimplement the Legacy DatagramSocket API
JEP 374: Disable and Deprecate Biased Locking
JEP 381: Remove the Solaris and SPARC Ports
JEP 385: Deprecate RMI Activation for Removal

そのほかの詳しい仕様は、前述のOpenJDKのページや、下記のリリースノートを参照していただきたい。

JDK 15 Release Notes

後藤大地

この記事をお届けした
グノシーの最新ニュース情報を、

でも最新ニュース情報をお届けしています。

外部リンク

  • このエントリーをはてなブックマークに追加