Oracle GraalVM Enterprise Editionのアーキテクチャの概要
Oracle GraalVM Enterprise Edition (GraalVM Enterprise)は、アプリケーション開発用のグローバル標準に基づいて構築された高パフォーマンスのJDKディストリビューションです。これは、Javaおよび他のJVM言語で記述されたアプリケーションの実行を高速化する一方で、JavaScript、Pythonおよび他の多くの一般的な言語のランタイムも提供するように設計されています。GraalVM Enterpriseのポリグロット機能を使用すると、複数のプログラミング言語を単一のアプリケーションに混在させながら、外部言語のコール・コストを排除できます。
このページでは、開発者、ソリューション・アーキテクトおよびインフラストラクチャ・アーキテクトに、GraalVM Enterpriseのアーキテクチャの概要に加え、ランタイム・モード、動作保証されているプラットフォーム、使用可能なディストリビューション、コア・コンポーネントおよび追加コンポーネント、様々な機能のサポート・レベルに関する情報を提供します。GraalVM Enterpriseの概念の概要および利点の詳細は、「ソリューションの概要」ページを参照してください。
アーキテクチャ
図1.GraalVM Enterpriseのランタイム
上の図は、GraalVM Enterpriseの完全なアーキテクチャ概要を示しています。
GraalVMは、Javaで記述された高度なJust-in-Time (JIT)最適化コンパイラをHotSpot Java仮想マシンに追加します。
GraalVMの言語実装フレームワーク(Truffle)では、JavaおよびJVMベースの言語の実行に加えて、JavaScript、Ruby、Pythonおよび他の多くの一般的な言語をJVMで実行できるようになります。Truffleを使用すると、Javaと他のサポートされている言語は、直接相互運用し、同じメモリー領域でデータをやり取りできます。
ランタイム・モード
GraalVM Enterpriseのランタイム環境としての独自性は、JVMランタイム・モード、ネイティブ・イメージ、Java on Truffleなどの複数の操作モードを提供していることにあります(同じJavaアプリケーションをいずれでも実行できます)。
JVMランタイム・モード
HotSpot JVMでプログラムを実行するとき、GraalVMはデフォルトでGraalコンパイラを最上位層のJITコンパイラとして設定します。実行時に、アプリケーションはJVMに通常どおりロードされ、実行されます。JVMは、Javaまたはその他のJVMのネイティブ言語のバイトコードをコンパイラに渡し、コンパイラはそれをマシン・コードにコンパイルしてJVMに返します。Truffleフレームワーク上に記述されたサポートされている言語のインタプリタは、それ自体がJVMで実行されるJavaプログラムです。
ネイティブ・イメージ
ネイティブ・イメージは、Javaコードをスタンドアロン・バイナリ実行可能ファイルまたはネイティブ共有ライブラリにコンパイルする革新的なテクノロジです。ネイティブ実行可能ファイルのビルド時に処理されるJavaバイトコードには、すべてのアプリケーション・クラス、依存性、サード・パーティ依存ライブラリおよび必要なJDKクラスが含まれています。生成される自己完結型のネイティブ実行可能ファイルは、JVMを必要としない個々のオペレーティング・システムおよびマシン・アーキテクチャに固有のものです。
Java on Truffle
Java on Truffleは、Truffleフレームワークを使用してビルドされたJava仮想マシン仕様の実装です。これは、VMのすべてのコア・コンポーネントを含み、Java Runtime Environmentライブラリと同じAPIを実装し、GraalVMのすべてのJARおよびネイティブ・ライブラリを再利用する、完全なJava VMです。
ディストリビューション・コンポーネント・リスト
GraalVM Enterpriseは、コア機能および追加機能で構成されています。
コア・コンポーネント
- Java HotSpot VM
- Graalコンパイラ - 最上位JITコンパイラ
- ポリグロットAPI - 共有ランタイムでプログラミング言語を組み合せるためのAPI
- GraalVMアップデータ - 追加機能をインストールするためのユーティリティ
追加機能
GraalVM Enterprise JDKインストールは、より多くの言語ランタイムおよびユーティリティで拡張できます。
ツール/ユーティリティ:
- ネイティブ・イメージ – アプリケーションをネイティブ・プラットフォームの実行可能ファイルに事前にコンパイルするテクノロジ。
- LLVMツールチェーン - ネイティブ・プログラムをGraalVMで実行可能なビットコードにコンパイルするための一連のツールおよびAPI。
ランタイム:
- JavaScript – JavaScriptインタプリタを使用したREPL
- Node.js - JavaScriptのNode.js 16.14.2ランタイム
- LLVM – LVMビットコードからプログラムを直接実行するための
lli
ツールによるLLVMランタイム - Java on Truffle – Javaバイトコード・インタプリタを介してJavaを実行するためにTruffleフレームワーク上にビルドされたJVM実装。
- Python – Python 3.8.5互換ランタイム
- Ruby – Ruby 3.0.3互換ランタイム
- R – GNU R 4.0.3互換ランタイム
- GraalWasm – WebAssembly (Wasm)ランタイム
次に読むもの
GraalVM Enterpriseを初めて使用するか、使用経験がほとんどないユーザーは、「GraalVM Enterpriseのスタート・ガイド」に進みます。GraalVM Enterpriseをローカル・マシンにダウンロードしてインストールし、ガイドに記載されている例を実行してみるか、独自のワークロードでGraalVM Enterpriseをテストします。
GraalVM Enterpriseがすでにインストールされているか、これまでに使用した経験がある開発者は、スタート・ガイドをスキップしてリファレンス・マニュアルに進み、GraalVM Enterpriseテクノロジの詳細を確認できます。