[速報]Java 13が登場。ZGCの改善やSwitch式の実現など新機能。 Oracle Code One 2019
オラクルは「Java 13」をサンフランシスコで開催中のイベント「Oracle Code One 2019」で発表しました。明日正式リリース予定です。
2017年9月に登場したJava 9以降、Javaは6カ月ごとに「フィーチャーリリース」と呼ばれるメジャーアップデートが行われています。Java 13は、今年3月に登場したJava 12に続くメジャーアップデートです。
Java 13のおもな新機能は、Application Class-Data Sharing機能を拡張した「Dynamic CDS Archives(JEP 350)」、ZGCガベージコレクタを改善し使われていないヒープメモリを返却する「ZGC: Uncommit Unused Memory(JEP 351)」、Project Loomの一部として既存のSocket APIを再実装した「Reimplement the Legacy Socket API(JEP 353)」、Switch式を可能にする「Switch Expressions(JEP 354)」(プレビュー)、Javaコード中にテキストとしてリテラルを記述できる「Text Blocks(JEP 355)」(プレビュー)など。
What's new in JDK 13 #JDK13 #Java https://t.co/P5y9cqFRIM pic.twitter.com/Gl9BRMxXi4
— Java (@java) September 16, 2019
Text Blocksについて。例えばHTMLを生成するためのコードとしてテキストを埋め込む場合、次のように記述する必要がありました。
コードとして読みにくく、またバグが入り込みやすくもあります。
Text Blocksによって、下記のようにコードが読みやすくなり、コード中にHTMLをコピー&ペーストできるようになります。
しかもHTMLの部分の先頭に入っているスペースについては、Javaのコンパイラがどれが不要なスペースで、どれが必要かを判断して自動的に除去してくれるため、上記の図のグレイのドットで示された空白は自動的に除去されます。
Javaランタイムでの性能向上
半年前に登場したJava 12や今回のJava 13では、目を見張るような大きな新機能追加などは行われていません。
これについてOracle Code One 2019の基調講演に立った米オラクルのJava Language ArchitectであるBrian Goetz氏は、「今後もラムダ式のような大きな機能追加は予定されていない。しかしこれはJavaにイノベーションが起きていないのではなく、(6カ月というタイムベースのリリースによって)小さな機能に分割されて実装されて行っているからだ」と、Javaは今後も進化し続けることを強調しました。
基調講演ではJavaランタイムの進化についても紹介されました。
下記のチャートはJavaによるシンプルなHello Worldアプリの起動時間(青のマーカー)およびラムダ式を用いたHello Lambdaアプリの起動時間(オレンジのマーカー)を示したものです。マーカーが長いほど起動時間がかかっていることを示しています。
青のマーカーを見ると、左から2つめのJava 9でモジュールシステムが入ったことで起動時間が大きくなりますが、その後にモジュールのロードを最適化するなどで起動時間を短縮。現時点ではJava 8よりも改善されています。
ラムダ式についても登場当初は初期化に時間がかかっていましたが、これも現在では60ミリセカンドを切るほど改善されてきました。
JDK 9からデフォルトのガベージコレクタとなったG1の性能についても、青のマーカーで示されたスループット、オレンジのマーカーで示されたレスポンシブネスのいずれも、Javaのリリースごとに改善。Java 9と比較して現時点ではスループットが約10%、レスポンシブネスは60%から65%改善されています。
G1以外の新しいガベージコレクタであるZGCでは、ガベージコレクションに伴う停止時間が劇的に改善されていることが示されました。
下記のチャートはパラレル、G1、ZGCの3つのガベージコレクションについて、それぞれ左から停止時間の平均、95%パーセンタイル、99.9パーセンタイル、最大値を示したもの。
ZGCの停止時間は平均でミリセカンド以下、最大でも2ミリセカンドとなっています。
停止時間だけでなく、それぞれの性能比較も示されました。青のマーカーががスループット、オレンジがレスポンシブネスで、ZGCはポーズ時間が短いためレスポンシブネスはよい値になるが、G1は良好なスループットと小さめのヒープサイズという利点があると説明されました。
現在Javaで進行中のプロジェクト
Brian Goetz氏はJavaにおいて現在も複数のプロジェクトが進行中であり、今後もJavaが前進していくことを示しました。
Project Amber
ライトサイズ ランゲージセレモニーと呼ぶさまざまな新機能を包括したプロジェクト。
参考:Javaのコードをさらに読みやすくする「Project Amber」。JavaOne 2017
Project Valhalla
性能面でモダンなハードウェアに適したオブジェクト配置を実現するプロジェクト。すでに5年にわたって取り組みが続いている。
Project Panama
Javaコードとネイティブコード、ヒープ内のデータなどを最適化するプロジェクト。
参考:Java 9の先、Java 10/11では最新のハードウェアやOSに最適化したデータのメモリ配置が可能になる。JavaOne 2015
Project Loom
スレッドのスケーラビリティに関するボトルネックを排除するプロジェクト
(2019/9/17 9:10追記)新機能の説明でSwitch文が抜けておりました。本文に追記しました。
(2019/9/17 12:35追記)Switch文をSwitch式に修正しました。
Oracle OpenWorld 2019
- [速報]Oracle Cloudを期限なく無料で使える「Always Free」発表。1GBのVM2つ、Autonomous Database 2つなど提供。Oracle OpenWorld 2019
- [速報]Oracle CloudがSQL ServerやWindows Serverをサポート。Azureとの相互接続も欧州とアジアへ拡大。Oracle OpenWorld 2019
- [速報]Oracle Autonomous Linuxリリース。ダウンタイムなしで自律的にパッチ適用、チューニング実行、RHELと100%互換など。Oracle OpenWorld 2019
- [速報]OracleとVMwareが提携。VMware環境でのOracleをサポート開始。「Oracle Cloud VMware Solution」も発表。Oracle OpenWorld 2019
Oracle Code One 2019
あわせて読みたい
[速報]Oracle Cloudを期限なく無料で使える「Always Free」発表。1GBのVM2つ、Autonomous Database 2つなど提供。Oracle OpenWorld 2019
≪前の記事
Java EE 8フル互換の「Jakarta EE 8」がEclipse Foundationから正式リリース。これからはクラウドネイティブのためのフレームワークへと進化する