Oracle GraalVMは、高パフォーマンスのJDKで、代替の実行時(JIT)コンパイラを使用することで、JavaおよびJVMベースのアプリケーションのパフォーマンスを高速化できます。GraalVM Enterpriseは、アプリケーションの遅延を低減し、ガベージコレクション時間を短縮してピークスループットを改善できるだけでなく、24時間365日のOracleサポートも付属しています。
また、ネイティブ・イメージ・ユーティリティも用意されているため、Javaバイトコードを事前(AOT)にコンパイルし、一部のアプリケーションについて、ほぼ瞬時に起動し、ほんの少しのメモリリソースしか消費しないネイティブ実行可能ファイルを生成することができます。
GraalVMは、複数のプログラミング言語を高パフォーマンスで実行できるランタイム・プラットフォームを構築するために、2011年にOracle Labsの調査プロジェクトとして始動しました。GraalVMプロジェクトの中心となっていたのは、高度な最適化GraalVMコンパイラを実行時(JIT)コンパイラとしてJava Virtual Machine(JVM)に使用するか、GraalVMネイティブイメージ機能によりJavaバイトコードを事前にネイティブ・マシン・コードにコンパイルすることでした。GraalVMのTruffle言語実装フレームワークは、GraalVMコンパイラと連動し、JavaScript、Python、Ruby、およびその他のサポートされている言語を優れたパフォーマンスでJVMで実行します。
GraalVMをJITモードで使用する場合、JVMはGraalVM JIコンパイラを使用して、アプリケーションを実行しながら、Javaバイトコードからプラットフォーム固有のマシンコードを作成します。プログラムの実行中にコンパイルが増分的に実行され、頻繁に実行されるコードに追加の最適化が適用されます。このアプローチでは、積極的なインライン化、部分的なエスケープ解析、その他の高度な最適化により、ホットスポット内のコードを非常に高速に実行することができます。一部の最適化では、オブジェクトの割当てを減らして、ガベージコレクタの負荷を軽減します。これにより、長時間実行アプリケーションのピークパフォーマンスが向上します。
GraalVMネイティブ・イメージ・ユーティリティで、Javaバイトコードをコンパイルして、ネイティブマシン実行可能ファイルを事前(ビルド時など)に生成することもできます。これらの実行可能ファイルは、ほぼ瞬時に起動し、JVMで実行されている同じJavaアプリケーションで使用されるメモリのほんの一部しか消費しません。また、ネイティブ実行可能ファイルは、アプリケーションが必要とするクラス、メソッド、依存ライブラリしか含んでいないためコンパクトです。
GraalVMでは、Truffle言語実装フレームワークにより、多言語の相互運用性もサポートされています。Truffleにより、サポートされている言語で記述されたプログラムは、多言語ライブラリを使用できるようになります。たとえば、JavaScriptプログラムがRubyメソッドを呼び出し、コピーを作成せずに値を共有することができます。JVMで実行されている場合、TruffleはGraalVMコンパイラと連動して、Javaと同様に、サポートされている言語をネイティブ・マシン・コードにコンパイルすることで、パフォーマンスを最適化します。
GraalVMコンパイラの詳細については、eBook「GraalVM for Dummies」をお読みください。
GraalVMのコンパイラには、パフォーマンスやリソースの消費を大幅に改善する、多数の追加の最適化アルゴリズムが含まれています。GraalVMのネイティブイメージ機能では、G1ガベージコレクタや、圧縮ポインタ、またコンパイラがより効率的なコードを生成するのに役立つプロファイルに基づく最適化など、多くの高度な機能がサポートされています。
GraalVMは、追加コストなしでJava SE製品に含まれています。オラクルによる24時間365日のサポートが付属しており、セキュリティの修正やクリティカル・パスの更新を利用することができ、より予測可能なパフォーマンスと信頼性を実現できます。クラウドにJavaを移行する場合、Oracle Cloud Infrastructure(OCI)でGraalVMを自由に使用することができます。
GraalVMを使用することで、開発者はより効率的なコードを構築することができ、クラウド環境やハイブリッド環境の分離性や俊敏性を向上させることができます。現在、ますます多くの企業がGraalVMを使用するようになっている理由には、次のようなものがあります。
GraalVMイノベーションは、パフォーマンスを迅速化することで、Javaコードが現在のコンピューティングの需要に遅れずについていき、顧客のニーズにすばやく対応できるように支援します。高度なオプティマイザによって、ピークスループットが向上します。また、オブジェクトの割当てを最小限に抑えてガベージコレクションにかかる時間を短縮することで、メモリ消費を最適化します。GraalVMをJITモードで実行することで、最大50%のパフォーマンスの向上を実現できます。これによりメモリが早く解放されるため、他のワークロードを同じインフラストラクチャで実行できるようになり、ITコストを削減できます。
クラウド・ネイティブ・アプリケーションの構築Oracle GraalVMのネイティブ・イメージ・ユーティリティは、Javaアプリケーションのバイトコードを事前にマシンバイナリにコンパイルします。ネイティブ実行可能ファイルは、約100倍速く起動でき、メモリ消費を最大5分の1に抑えることができます。
組織はワークロードをクラウドに移行し、システムリソースの利用料金を時間単位で支払うようになっているため、運用コストの削減の実現にGraalVMを役立てることができます。これらの結果は、GraalVMにより生成されたネイティブ実行可能ファイルが、Helidon、Micronaut、Quarkus、Spring Bootなどの主要なマイクロサービス・フレームワークによってサポートされている領域であるマイクロサービス・デプロイメントに最適であることを示しています。
多言語プログラムの開発と生産性の向上Javaやその他の言語(JavaScriptなど)を優れたパフォーマンスでJVMで実行できます。Oracle NetSuiteのSuiteScriptは、NetSuiteで実行されるアプリケーションをエンドユーザーがカスタマイズするための拡張言語です。Oracle GraalVMにより、NetSuiteでJavaScriptをマシンコードにコンパイルできるTruffleベースのJavaScriptランタイムを埋め込むことができるようになりました。これにより、JVMで実行されるSuiteScriptよりも4倍高速な実行を実現します。
GraalVMには、プログラムでJITを実行しながらマシンコードを生成することで、Javaアプリケーションのパフォーマンスを迅速化する高度な最適化コンパイラが含まれています。事前にコンパイルすることで、ネイティブイメージをすばやく起動し、メモリ消費を抑えることができるため、クラウド・ネイティブ・デプロイメントに最適です。生産性を向上させるために多言語プログラムがサポートされているため、開発者は、記述している言語に関係なく、ビジネス上の問題を解決するために必要となる最適なライブラリを使用できます。