JavaおよびJVM
Java HotSpot VMで実行されるJVMベースのアプリケーションは、GraalVMで実行できます。GraalVMはJava HotSpot VMに基づいていますが、Javaで記述された高度なJust-in-Time (JIT)コンパイラ(Graalコンパイラ)を統合しています。実行時に、アプリケーションはJVMに通常どおりロードされ、実行されます。JVMはバイトコードをGraalコンパイラに渡し、コンパイラはそれをマシン・コードにコンパイルしてJVMに返します。
GraalVMの動的コンパイラは、コード分析および最適化への独自のアプローチを通じて、Java、Scala、Kotlinまたはその他のJVM言語で記述されたアプリケーションの効率性と速度を向上させることができます。たとえば、コストのかかるオブジェクト割当てを排除できるため、高度に抽象化されたプログラムのパフォーマンス上の利点が確保されます。さらに学習するには、Graalの「コンパイラ」ページを参照してください。オープン・ソース・コンパイラのコードは、GitHubで入手できます。
コンパイラのオペレーティング・モード
HotSpot JITコンパイラとして使用する場合、Graalには次の2つの操作モードがあります:
-
libgraal: Graalコンパイラは、事前にネイティブ共有ライブラリにコンパイルされます。このオペレーティング・モードでは、共有ライブラリはHotSpot VMによってロードされます。コンパイラは、HotSpotヒープとは別のメモリーを使用し、ウォームアップが不要のため最初から高速で実行されます。これはデフォルトの推奨操作モードです。
-
jargraal: Graalコンパイラは、Javaアプリケーションのそれ以外の部分と同じウォームアップ・フェーズを経由します。つまり、ホット・メソッドがコンパイルされる前に最初に解釈されます。このモードは、
-XX:-UseJVMCINativeLibrary
コマンドライン・オプションで選択します。この場合、コードを迅速に生成する前にコンパイラ自体のコンパイルが必要になるため、ピーク・パフォーマンスに達するまでの時間が遅れます。このモードでは、Javaデバッガを使用してGraalコンパイラをデバッグできます。
相互運用性
JVMベースの言語をGraalVMで実行する以外に、Truffle言語実装フレームワークで実装された他の言語をJavaから直接コールすることもできます。他のプログラミング言語との相互運用性の詳細は、「ポリグロット・プログラミング」および「言語の埋込み」ガイドを参照してください。