Java仮想マシンとしてのGraalVM

GraalVMは、Java HotSpot仮想マシンに基づいているため、Java HotSpot仮想マシンで実行されるアプリケーションもGraalVM上にあります。

GraalVMには、Javaで記述された高度なコンパイラ(Graalコンパイラと呼ばれる)が含まれています。実行時には、他のJava仮想マシン(JVM)と同様に、GraalVMはアプリケーションをロードし、そのコードを分析してパフォーマンス・ボトルネック(ホット・スポット)を検出します。GraalVMは、パフォーマンス・クリティカルなコードをGraal Just-in-Time (JIT)コンパイラに渡し、コンパイラはそれをマシン・コードにコンパイルしてから戻します。

Graalコンパイラは、コード分析および最適化への独自のアプローチを通じて、Java、Scala、Kotlinまたはその他のJVM言語で記述されたアプリケーションの効率性と速度を向上させることができます。たとえば、コストのかかるオブジェクト割当てを排除できるため、高度に抽象化されたアプリケーションのパフォーマンス上の利点が確保されます。プラットフォームに依存しないコンパイラの最適化の詳細は、GraalVM Community Edition GitHubリポジトリのCEOptimization enumを参照してください。

Graal (JIT)コンパイラも、Java HotSpot仮想マシンと統合されるようになりました。詳細は、「Graalコンパイラ」を参照してください。

相互運用性

GraalVMには、GraalVMで実行される、プログラミング言語のインタプリタをビルドするためのJavaで記述されたライブラリ(Truffle言語実装フレームワーク)も含まれています。このため、これらの「Graal言語」は、Graalコンパイラの最適化の可能性のメリットを得ることができます。このようなコンパイルのパイプラインは次のとおりです:

  1. 抽象構文ツリー(AST)によって表現されるTruffleフレームワークのコードおよびデータが部分的に評価され、コンパイル・グラフが生成されます。このようなASTが「ホット」な(コール回数が多い)場合は、コンパイラによるコンパイルがスケジュールされます。
  2. マシン・コードを生成するために、Graalコンパイラによってコンパイル・グラフが最適化されます。
  3. JVMCIは、このマシン・コードをJVMのコード・キャッシュにインストールします。
  4. ASTは、インストールされたマシン・コードが使用可能になると、そのコードに実行を自動的にリダイレクトします。

他のプログラミング言語との相互運用性の詳細は、「ポリグロット・プログラミング」および「言語の埋込み」ガイドを参照してください。

Ahead-of-Timeコンパイル

Truffleフレームワークに加えて、GraalVMでは、そのコンパイラが高度なAhead-of-Time (AOT)コンパイル・テクノロジであるネイティブ・イメージに組み込まれています。これは、JavaおよびJVMベースのコードをネイティブ・プラットフォームの実行可能ファイルに変換します。これらのネイティブ実行可能ファイルは、ほぼ瞬時に起動し、より小さく、かつリソースの消費がJVMのものより少ないため、クラウド・デプロイメントおよびマイクロサービスに最適です。AOTコンパイルの詳細は、「ネイティブ・イメージ」を参照してください。