戻る

Javaパフォーマンスの高速化

GraalVMの高性能JITコンパイラは、高度なコンパイラ最適化と積極的かつ洗練されたインライン化技術により、より高速に動作し、ガベージを減らし、CPU使用量を削減する最適化されたネイティブマシンコードを生成します。その結果、より高速に動作し、リソース消費を削減するアプリケーションが実現し、クラウドおよびインフラストラクチャのコストを削減します。

Speedup vs JDK

図1. OpenJDK 11との速度比較

速度向上幅はワークロードの種類によって異なります。「さまざまな人気のあるシステム、フレームワーク、JVM向けに作成されたアプリケーションで構成される現代的なワークロードの範囲を含む」ルネサンスベンチマークスイートでは、Oracle GraalVMはOpenJDK 8に対して1.55倍の幾何平均速度向上を達成し、OpenJDK 11でも同様の結果が得られています。

Oracle Cloud Infrastructure

Oracle Cloud Infrastructure (OCI) Monitoring (テレメトリ)サービスをOracle GraalVM上で実行することで、トランザクション処理率が10%向上し、ガベージコレクション時間が25%削減、GC一時停止時間が17%削減、CPU使用率が5%削減されました。これらの改善は、数千万のデータポイントを日常的に処理し、数十億のメトリックを収集し、増え続けるOCIサービス製品群からの数百万のリクエストに対応するメモリ集約型サービスにとって非常に大きなメリットとなります。

OCI Monitoring Service Throughput

図2. OCIモニタリングサービスのスループット (秒あたりのトランザクション数)

クイックスタート

インフラストラクチャコストの削減

アプリケーションのパフォーマンス向上、CPUとメモリの使用量削減は、すべての開発者が目指す目標です。これらの目標は間違いなく称賛に値し、GraalVMを使用すれば、より簡単に達成できますが、これらの改善の真の価値は、本番環境でアプリケーションを実行するためのコスト削減です。リソース要件が少ない高速なアプリケーションは、特定のサービスを提供するのに必要なサーバーの数が減ることを意味し、サーバー数が減るということは、毎月のクラウド請求額が減り、オンプレミス展開のための資本コストと運用コストが削減されることを意味します。

計算は簡単です。リソース要件がまったく削減されない場合でも、スループットが約11%向上するだけで、以前は10台必要だったものが9台で済むようになります。これは、支払うクラウドサーバーが1台減るか、購入してメンテナンスするデータセンターサーバーが1台減ることを意味します。

Oracle GraalVMは、デルEMCサーバーのパフォーマンス選択肢でした。Javaワークロード分析とSPECjbb®2015ベンチマークにより、最大jOPSの結果がほぼ8%向上しました。

— Kurtis Bowman, デルEMC CTOサーバーオフィス アーキテクチャ担当ディレクター

ツイートしたい内容

Twitterは、世界で最も人気のあるソーシャルメディアサービスの1つであり、世界中の何百万人ものユーザーが毎日使用するプラットフォームを運営しています。コストを削減し、パフォーマンスを向上させるために、TwitterはTweet、Social、Newsなどのコアサービスを実行するためにGraalVMを利用しています。GraalVM JITコンパイラの効率性により、Twitterは少ないサーバーでスループット目標を達成でき、大幅な節約につながっています。

基盤となるコードを変更することなく、同じハードウェアで8〜11パーセントのパフォーマンス向上が見られることは、一生に一度の出来事であり、大幅なコスト削減とTwitterの将来の柔軟性につながります。

— Chris Thalinger, Twitter スタッフソフトウェアエンジニア

クイックスタート

コード変更なしでパフォーマンス向上

OpenJDKプロジェクトが6か月のリリースサイクルで前進し、機能が準備でき次第リリースされる時間ベースのリリースモデルを提供していますが、Javaエコシステムの大部分は、本番環境でJava 8およびJava 11を依然として使用しています。

Javaエコシステムの改善に対するGraalVMの取り組みは、最も人気のある主要バージョンをサポートすることにあります。GraalVMには互換性のあるJDKが含まれており、現在Java 8またはJava 11をベースにしたダウンロードを提供しています。GraalVMを使用してJavaアプリケーションを高速化したり、Native Image機能でネイティブ実行可能ファイルを構築したり、他の言語のライブラリを組み込んだりするために、最新のOpenJDKリリースへの複雑な移行を行う必要はありません。GraalVMへのサービスの移行は、ほとんどの場合、JDKのダウンロードまたはベースコンテナイメージをGraalVMベースのものに置き換えるだけで済み、コード変更や新しい言語機能の活用は必要ありません。

クイックスタート

同等の優れた開発者生産性

GraalVMの最高の機能の1つは、Javaエコシステム内のすべてのツールとの互換性です。GraalVMは、コードを変更したり、開発者の学習曲線を設けたりすることなく、より優れたパフォーマンスを提供するJavaアプリケーションを実行できます。GraalVMは、互換性のあるJDKとして、作業中のアプリケーションだけでなく、役立つJavaツールも実行できるため、ワークフローに適合します。GraalVMはデバッガーで動作し、ビルドツールで動作し、お気に入りのIDE内で動作し、継続的インテグレーション環境に移行したり、課題追跡ツールをGraalVM上で実行したり、その他の使用中のすべてのJavaサービスで動作します。

Java開発者である必要すらありません!他のJVM言語が生産性向上に役立つ場合でも、問題ありません。KotlinからClojure、Scalaまで、GraalVMはそれらすべてを優れたパフォーマンスで実行するのに役立ちます。

GraalVMは、Javaエコシステムとコミュニティの力を、すべての世界で最高のより強力なJDKディストリビューションと統合します。

クイックスタート

業界をリードするJavaアプリケーションフレームワークによってサポートされています

業界をリードするJavaアプリケーションフレームワークによってサポートされているGraalVMは、Javaエコシステムにおける最もエキサイティングなイノベーションとしてよく引用されています。たとえば、Native Imageテクノロジーを使用してアプリケーションをネイティブ実行可能ファイルにコンパイルする機能は、Javaアプリケーションのクラウド展開に革命をもたらします。これは、メモリによって制約された環境に個々のサービスが適切にパックされているか、すぐにクラウドコストの大部分を占めるマイクロサービスにとって特に重要です。幸いなことに、GraalVMを使用すると、クラウドで成功するためにアプリケーションをGoで書き直す必要はありません。ほとんどの主要なJavaアプリケーションおよびマイクロサービスフレームワークは、GraalVM Native Imageを念頭に置いて設計されているか、ファーストクラスのサポートを追加することに取り組んでいます。

Micronaut、Helidon、Quarkus、またはマイクロサービス用のSpring Boot、コマンドラインアプリケーション用のPicoCLIなど、どのようなタスクに直面していても、GraalVM Native Image互換のフレームワークを利用して作業を簡単にすることができます。

クイックスタート

Javaエコシステムの拡大

Java仮想マシン(JVM)を使用すると、小型の組み込みデバイスからメインフレームまですべてでJavaプログラムを実行できます。これは、基盤となるハードウェアおよびオペレーティングシステムプラットフォームの詳細を抽象化してコードの移植性を実現する高性能ランタイムです。しかし、JVMは、中間Javaバイトコード形式にコンパイルされたプログラムを実行するため、Java言語自体について実際には何も知らないことが判明しました。つまり、Javaバイトコードにコンパイルできる言語であれば、Scala、Kotlin、Clojureなど、JVM上で実行できます。ただし、Javaバイトコードにコンパイルされず、JVMによって提供されるメリットとジャストインタイムコンパイルのパフォーマンスメリットを活用できない人気のある言語が多数あります。

しかし、革新的なTruffle言語実装フレームワークのおかげで、GraalVMはJVM上でJavaScript/Node.js、Ruby、Python、Rなどの多くの人気のあるプログラミング言語の実行をサポートしています。LLVMビットコードまたはWebAssembly(Wasm)にコンパイルされたC、C++、およびその他の言語のサポートもあります。GraalVMとTruffleは、JVM上で非Javaバイトコードプログラムの実行を可能にするだけでなく、Truffleは、これらの言語がGraalVMの高度な最適化コンパイラテクノロジーの恩恵を受けて、GraalVMで実行されているJavaアプリケーションと同様に、より高速かつ効率的に実行できるようにします。いずれの場合も、GraalVM Truffle言語は、元のランタイムで実行する場合よりも、JVM上で高速に、通常は数倍高速に実行されます。

TruffleRubyは速度に高い可能性があり、optcarrotでCRubyより9倍高速です。

— Carol Chen, Shopify ソフトウェアエンジニア

GraalVM Truffle Languages

図4. GraalVM Truffle言語

壁を壊す

GraalVMは多数の言語で記述されたプログラムを実行できることに加えて、複数の言語を使用するプログラムを実行することも可能です!GraalVMでサポートされている言語のいずれでも使用できる、数千の便利なNode.jsパッケージ、Pythonライブラリ、Javaライブラリがあります。これにより、Python機械学習機能を組み込んだJavaマイクロサービスや、統計データ分析にRを使用するJavaScriptプログラムなどのユースケースが可能になります。

GraalVMの多言語サポートにより、さまざまな言語やドメインの専門知識を持つ開発者が共同作業を行うことができます。たとえば、オランダ国家警察はGraalVMを使用して、JavaとScalaで記述されたSpring Boot WebサービスにRコードを統合しました。これにより、データサイエンティストはデータ分析を実行するためのコードをRで記述でき、JavaとScalaの開発者はApache Kafkaと対話するサービスを構築できました。

RコードをScala/JVMプロジェクトに埋め込むことは、Rでアクセスできる強力なデータ処理パッケージを使用するための優れた方法となります…これは、あなた(またはあなたのデータサイエンティスト)が、Rの機能を作成するための専用エディター(例:RStudio)を使用でき、JVM側(例:IntelliJ)にお気に入りのエディターを使用できることを意味します。

— Nathan Perdijk, Codestar Scala開発者

クイックスタート

お問い合わせ