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コンパイラの最適化の可能性のメリットを得ることができます。このようなコンパイルのパイプラインは次のとおりです:
- 抽象構文ツリー(AST)によって表現されるTruffleフレームワークのコードおよびデータが部分的に評価され、コンパイル・グラフが生成されます。このようなASTが「ホット」な(コール回数が多い)場合は、コンパイラによるコンパイルがスケジュールされます。
- マシン・コードを生成するために、Graalコンパイラによってコンパイル・グラフが最適化されます。
- JVMCIは、このマシン・コードをJVMのコード・キャッシュにインストールします。
- ASTは、インストールされたマシン・コードが使用可能になると、そのコードに実行を自動的にリダイレクトします。
他のプログラミング言語との相互運用性の詳細は、「ポリグロット・プログラミング」および「言語の埋込み」ガイドを参照してください。
Ahead-of-Timeコンパイル
Truffleフレームワークに加えて、GraalVMでは、そのコンパイラが高度なAhead-of-Time (AOT)コンパイル・テクノロジであるネイティブ・イメージに組み込まれています。これは、JavaおよびJVMベースのコードをネイティブ・プラットフォームの実行可能ファイルに変換します。これらのネイティブ実行可能ファイルは、ほぼ瞬時に起動し、より小さく、かつリソースの消費がJVMのものより少ないため、クラウド・デプロイメントおよびマイクロサービスに最適です。AOTコンパイルの詳細は、「ネイティブ・イメージ」を参照してください。