Oracle GraalVM

SE Universal Subscriptionで追加コストなしで利用でき、クラウド・ネイティブ・デプロイメント向けのマイクロサービスベースのアプリケーションを構築することで、パフォーマンスの向上とコストの削減を実現し、現代のJavaアプリケーション開発を強化します。

Oracle GraalVMとは

GraalVMの定義

Oracle GraalVMは、高パフォーマンスのJDKで、代替の実行時(JIT)コンパイラを使用することで、JavaおよびJVMベースのアプリケーションのパフォーマンスを高速化できます。GraalVM Enterpriseは、アプリケーションの遅延を低減し、ガベージコレクション時間を短縮してピークスループットを改善できるだけでなく、24時間365日のOracleサポートも付属しています。

また、ネイティブ・イメージ・ユーティリティも用意されているため、Javaバイトコードを事前(AOT)にコンパイルし、一部のアプリケーションについて、ほぼ瞬時に起動し、ほんの少しのメモリリソースしか消費しないネイティブ実行可能ファイルを生成することができます。

GraalVM(Graalコンパイラ、Truffle、およびOracle Java Development Kit [JDK])

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」をお読みください。

Oracle GraalVM

GraalVMのコンパイラには、パフォーマンスやリソースの消費を大幅に改善する、多数の追加の最適化アルゴリズムが含まれています。GraalVMのネイティブイメージ機能では、G1ガベージコレクタや、圧縮ポインタ、またコンパイラがより効率的なコードを生成するのに役立つプロファイルに基づく最適化など、多くの高度な機能がサポートされています。

GraalVMは、追加コストなしでJava SE製品に含まれています。オラクルによる24時間365日のサポートが付属しており、セキュリティの修正やクリティカル・パスの更新を利用することができ、より予測可能なパフォーマンスと信頼性を実現できます。クラウドにJavaを移行する場合、Oracle Cloud Infrastructure(OCI)でGraalVMを自由に使用することができます。

Oracle GraalVMを使用する理由

GraalVMを使用することで、開発者はより効率的なコードを構築することができ、クラウド環境やハイブリッド環境の分離性や俊敏性を向上させることができます。現在、ますます多くの企業がGraalVMを使用するようになっている理由には、次のようなものがあります。

  • 変化する市場に迅速に適応できる:現在のビジネス・アプリケーションは、増大するデータを処理し、顧客の要求に迅速に対応する必要があります。Javaアプリケーションは、それらの変化に遅れずに進化できるため、開発者がアプリケーションのパフォーマンス効率を向上させながら、ITコストを削減するのに役立ちます。
  • クラウドネイティブ向けのマイクロサービスおよびコンテナを使用する最新のJavaアプリケーションを構築できる:マイクロサービスとは、1つの機能を実行する、小さな独立したミニアプリケーションのことです。ビジネス・アプリケーションでは、通常、数百ものサービスが利用されていますが、遅延を最小化し、クラウド消費コストを削減するには、それぞれが迅速に開始する必要があります。言い換えるなら、使用した分だけ料金を支払うことができます。
  • 異なるプログラミング言語を1つのJVMで連携できるエコシステムを育成することで、開発者の生産性を向上させることができる

GraalVMのお客様事例

パフォーマンスの向上と既存のJavaアプリケーションの拡張

GraalVMイノベーションは、パフォーマンスを迅速化することで、Javaコードが現在のコンピューティングの需要に遅れずについていき、顧客のニーズにすばやく対応できるように支援します。高度なオプティマイザによって、ピークスループットが向上します。また、オブジェクトの割当てを最小限に抑えてガベージコレクションにかかる時間を短縮することで、メモリ消費を最適化します。GraalVMをJITモードで実行することで、最大50%のパフォーマンスの向上を実現できます。これによりメモリが早く解放されるため、他のワークロードを同じインフラストラクチャで実行できるようになり、ITコストを削減できます。

クラウド・ネイティブ・アプリケーションの構築

Oracle GraalVMのネイティブ・イメージ・ユーティリティは、Javaアプリケーションのバイトコードを事前にマシンバイナリにコンパイルします。ネイティブ実行可能ファイルは、JVMで実行する場合と比較して、約100倍速く起動でき、メモリ消費を最大5分の1に抑えることができます。

Graalvm Enterprise Native
図1 – ネイティブ実行可能ファイルは、GoまたはJava HotSpotと比較して、ほぼ瞬時に起動し、ほんの少しのメモリしか消費しない

組織はワークロードをクラウドに移行し、システムリソースの利用料金を時間単位で支払うようになっているため、運用コストの削減の実現に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アプリケーションのパフォーマンスを迅速化する高度な最適化コンパイラが含まれています。事前にコンパイルすることで、ネイティブイメージをすばやく起動し、メモリ消費を抑えることができるため、クラウド・ネイティブ・デプロイメントに最適です。生産性を向上させるために多言語プログラムがサポートされているため、開発者は、記述している言語に関係なく、ビジネス上の問題を解決するために必要となる最適なライブラリを使用できます。