Oracle Code One 2019速報レポート

第2回 Oracleの汎用仮想マシン「GraalVM」の現状と課題[c1jp]

この記事を読むのに必要な時間:およそ 2 分

ネイティブイメージ化はAOTによる高速化が大きな課題

前述の3つの役割の中でも,ネイティブイメージの作成は特にいまホットな話題と言えます。従来のJVMの仕組みは汎用性が高い一方で,起動時間が遅いという構造上の課題を抱えていました。ネイティブイメージはその課題を解消するための極めて強力な武器になります。

GraalVMのネイティブイメージはJVM無しで実行できる点が特徴ですが,これはJVMと同様の役割を持った「SubstrateVM」と呼ばれる小型仮想マシンを使うことで実現されています。アプリケーションのクラスはネイティブイメージ作成時に実行可能なバイナリにコンパイルされ,SubstrateVMと一緒にパッケージされて提供されます。

ネイティブイメージの作成

ネイティブイメージの作成

ネイティブイメージの作成する場合,事前にアプリケーションの初期化を行うため,起動時間やメモリフットプリントという点では極めて有利ですが,その一方でJITによる実行時最適化ができないというデメリットもあります。その代わりに,AOTコンパイル技術を駆使して事前コンパイル時にコードを分析して最適化を行います。

ただし,現状ではAOTによる最適化はピーク時のスループットや最大レイテンシの削減という点で,JITに対して大きく溝を空けられています。ネイティブイメージをより強力なものにするためにはAOTの性能向上が必要であり,GraalVMプロジェクトでも重要な課題としてさまざまな取り組みが行われているとのことです。

将来的な目標としてはAOTでもJITと同等のスループット/レイテンシ削減を実現したいと,Thomas Wuerthinger氏は語っています。

AOTとJITの性能比較(現状)

AOTとJITの性能比較(現状)

AOTとJITの性能比較(目標)

AOTとJITの性能比較(目標)

そのための取り組みの1つに,⁠Profile-Guided Optimizations(PGO⁠⁠」があります。これは,事前に実際にアプリケーションを実行してワークロード情報を取得しておき,それをネイティブイメージ作成時に最適化に活用するというものです。PGOはとしてEnterprise Editionのバージョン19.2より実際に導入されました。

Profile-Guided Optimizations(PGO)

Profile-Guided Optimizations(PGO)

今後のリリース予定

GraalVMは,現在3ヵ月ごとのメジャーリリースというサイクルで開発が進められています。その年の最後にリリースされたバージョンは,LTSとして翌年1年間はサポートが提供されることになります。

GraalVMのリリースサイクルとバージョン

GraalVMのリリースサイクルとバージョン

直近では,2019年10月15日にバージョン19.2.1が,11月19日にバージョン19.3がリリースされます。現行バージョンはJava 8のみにしか対応していませんが,バージョン19.3ではJava 11がサポートされる予定です。

著者プロフィール

杉山貴章(すぎやまたかあき)

ONGS Inc.所属のプログラマ兼テクニカルライター。雑誌,書籍,Webメディアで多数の著作をもつ。

著書

バックナンバー

Oracle Code One 2019速報レポート