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