Java 仮想マシンとしての GraalVM

GraalVM は Java HotSpot 仮想マシン に基づいているため、Java HotSpot 仮想マシンで動作するアプリケーションは GraalVM でも動作します。

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

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

Graal (JIT) コンパイラは、Java HotSpot 仮想マシンにも統合されました。詳細については、Graal コンパイラ のセクションを参照してください。

相互運用性 #

GraalVM には、Truffle 言語実装フレームワーク (Java で記述されたライブラリ) も含まれており、GraalVM で実行されるプログラミング言語のインタプリタを構築できます。これらの「Graal 言語」は、その結果、Graal コンパイラの最適化の可能性を活用できます。このようなコンパイルのパイプラインは次のとおりです。

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

他のプログラミング言語との相互運用性の詳細については、多言語プログラミング および 言語の埋め込み ガイドを参照してください。

事前コンパイル #

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

お問い合わせ