[速報]Java 13が登場。ZGCの改善やSwitch式の実現など新機能。 Oracle Code One 2019

2019年9月17日

オラクルは「Java 13」をサンフランシスコで開催中のイベント「Oracle Code One 2019」で発表しました。明日正式リリース予定です。

Java 13 fig1Java 13のDukeは、クラウドの波に乗る「Cloud Surfer Duke」とのこと

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)」(プレビュー)など。

Text Blocksについて。例えばHTMLを生成するためのコードとしてテキストを埋め込む場合、次のように記述する必要がありました。

Java 13 fig7

コードとして読みにくく、またバグが入り込みやすくもあります。

Text Blocksによって、下記のようにコードが読みやすくなり、コード中にHTMLをコピー&ペーストできるようになります。

Java 13 fig8

しかもHTMLの部分の先頭に入っているスペースについては、Javaのコンパイラがどれが不要なスペースで、どれが必要かを判断して自動的に除去してくれるため、上記の図のグレイのドットで示された空白は自動的に除去されます。

Javaランタイムでの性能向上

半年前に登場したJava 12や今回のJava 13では、目を見張るような大きな新機能追加などは行われていません。

これについてOracle Code One 2019の基調講演に立った米オラクルのJava Language ArchitectであるBrian Goetz氏は、「今後もラムダ式のような大きな機能追加は予定されていない。しかしこれはJavaにイノベーションが起きていないのではなく、(6カ月というタイムベースのリリースによって)小さな機能に分割されて実装されて行っているからだ」と、Javaは今後も進化し続けることを強調しました。

Java 13 fig2

基調講演ではJavaランタイムの進化についても紹介されました。

下記のチャートはJavaによるシンプルなHello Worldアプリの起動時間(青のマーカー)およびラムダ式を用いたHello Lambdaアプリの起動時間(オレンジのマーカー)を示したものです。マーカーが長いほど起動時間がかかっていることを示しています。

Java 13 fig3

青のマーカーを見ると、左から2つめのJava 9でモジュールシステムが入ったことで起動時間が大きくなりますが、その後にモジュールのロードを最適化するなどで起動時間を短縮。現時点ではJava 8よりも改善されています。

ラムダ式についても登場当初は初期化に時間がかかっていましたが、これも現在では60ミリセカンドを切るほど改善されてきました。

JDK 9からデフォルトのガベージコレクタとなったG1の性能についても、青のマーカーで示されたスループット、オレンジのマーカーで示されたレスポンシブネスのいずれも、Javaのリリースごとに改善。Java 9と比較して現時点ではスループットが約10%、レスポンシブネスは60%から65%改善されています。

Java 13 fig4

G1以外の新しいガベージコレクタであるZGCでは、ガベージコレクションに伴う停止時間が劇的に改善されていることが示されました。

下記のチャートはパラレル、G1、ZGCの3つのガベージコレクションについて、それぞれ左から停止時間の平均、95%パーセンタイル、99.9パーセンタイル、最大値を示したもの。

ZGCの停止時間は平均でミリセカンド以下、最大でも2ミリセカンドとなっています。

Java 13 fig5

停止時間だけでなく、それぞれの性能比較も示されました。青のマーカーががスループット、オレンジがレスポンシブネスで、ZGCはポーズ時間が短いためレスポンシブネスはよい値になるが、G1は良好なスループットと小さめのヒープサイズという利点があると説明されました。

Java 13 fig6

現在Javaで進行中のプロジェクト

Brian Goetz氏はJavaにおいて現在も複数のプロジェクトが進行中であり、今後もJavaが前進していくことを示しました。

Project Amber
ライトサイズ ランゲージセレモニーと呼ぶさまざまな新機能を包括したプロジェクト。

参考:Javaのコードをさらに読みやすくする「Project Amber」。JavaOne 2017

Java 13 fig9

Project Valhalla
性能面でモダンなハードウェアに適したオブジェクト配置を実現するプロジェクト。すでに5年にわたって取り組みが続いている。

Java 13 fig10

Project Panama
Javaコードとネイティブコード、ヒープ内のデータなどを最適化するプロジェクト。

参考:Java 9の先、Java 10/11では最新のハードウェアやOSに最適化したデータのメモリ配置が可能になる。JavaOne 2015

fig11

Project Loom
スレッドのスケーラビリティに関するボトルネックを排除するプロジェクト

Java 13 fig12

(2019/9/17 9:10追記)新機能の説明でSwitch文が抜けておりました。本文に追記しました。
(2019/9/17 12:35追記)Switch文をSwitch式に修正しました。

Oracle OpenWorld 2019

Oracle Code One 2019

このエントリーをはてなブックマークに追加
follow us in feedly




カテゴリ

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed


最新記事10本