- GraalVM for JDK 23 (最新)
- GraalVM for JDK 24 (アーリーアクセス)
- GraalVM for JDK 21
- GraalVM for JDK 17
- アーカイブ
- 開発ビルド
最適化とパフォーマンス
ネイティブイメージは、パフォーマンス、ファイルサイズ、ビルド時間、デバッグ容易性、その他の指標に関して、生成されたバイナリを最適化するためのさまざまなメカニズムを提供します。
最適化レベル #
gcc
やclang
と同様に、ユーザーは-O
オプションを使用して最適化レベルを制御できます。デフォルトでは、パフォーマンス、ファイルサイズ、ビルド時間のバランスを取ることを目的とした-O2
が使用されます。次の表は、さまざまな最適化レベルの概要と、それらがいつ役立つかを説明しています。
レベル | 最適化 | ユースケース |
---|---|---|
-Ob |
削減 | クイックビルドモード: 時間のかかる最適化を避けることで、開発中のビルドを高速化します。これにより、ファイルサイズが小さくなることもあります。 |
-Os |
削減 | サイズ最適化: -Os は、コードまたはイメージサイズを大幅に増加させる可能性のある最適化を除き、すべての-O2 最適化を有効にします。通常、パフォーマンスが低下する代わりに、可能な限り最小のイメージを作成します。 |
-O0 |
なし | 通常、デバッグエクスペリエンスを向上させるために-g と一緒に使用されます。 |
-O1 |
基本 | パフォーマンスを犠牲にして、ファイルサイズとビルド時間を削減します。Oracle GraalVMの-O1 は、GraalVM Community Editionの-O2 とほぼ同等です。 |
-O2 |
高度 | デフォルト: 合理的なファイルサイズで良好なパフォーマンスを目指します。 |
-O3 |
すべて | ビルド時間が長くなる代わりに、最高のパフォーマンスを目指します。Oracle GraalVMがPGOビルド(--pgo オプション)で自動的に使用します。GraalVM Community Editionでは、-O3 と-O2 は同じです。 |
スループット向上のためのプロファイルガイド最適化 #
スループットを向上させるためにアプリケーションを最適化するには、プロファイルガイド最適化の使用を検討してください。これらの最適化により、Graalコンパイラーは、アプリケーションをAOTコンパイルするときに、JITコンパイラーとして実行しているときと同様に、プロファイリング情報を活用できます。このためには、次の手順を実行します。
--pgo-instrument
を使用してアプリケーションをビルドします。- プロファイリング情報を生成するために、代表的なワークロードを使用して、インストルメント化されたアプリケーションを実行します。この実行から収集されたプロファイルは、デフォルトでdefault.iprofファイルに保存されます。
--pgo
オプションを使用してアプリケーションをリビルドします。カスタムの.iprofファイルを--pgo=<your>.iprof
で渡すことができます。それ以外の場合は、default.iprofが使用されます。これにより、イメージがリビルドされ、アプリケーションの最適化されたバージョンが生成されます。
このトピックの詳細については、プロファイルガイド最適化の基本的な使い方を参照してください。
特定のマシンへの最適化 #
ネイティブイメージは、gcc
やclang
と同様に機能する-march
オプションを提供します。これにより、ユーザーは、コードをネイティブにコンパイルするときに、Graalコンパイラーが使用できる命令のセットを制御できます。デフォルトでは、ネイティブイメージはx64ではx86-64-v3
、AArch64ではarmv8-a
を使用します。利用可能なすべてのマシンタイプを一覧表示するには、-march=list
を使用します。生成されたバイナリが、デプロイされるマシンタイプと同じまたは類似のマシンタイプでビルドされている場合は、-march=native
を使用します。このオプションは、バイナリが生成されるマシンで利用可能なすべての命令を使用するようにコンパイラーに指示します。一方、生成されたバイナリが、多くの異なる、場合によっては非常に古いマシンを持つユーザーに配布される場合は、-march=compatibility
を使用します。これにより、コンパイラーが使用する命令のセットが最小限に抑えられ、生成されたバイナリの互換性が向上します。
追加機能 #
ネイティブイメージは、生成されたバイナリをさらに最適化するための追加機能を提供します。
- 適切なガベージコレクターを選択し、ガベージコレクションポリシーを調整することで、GC時間を短縮できます。メモリ管理を参照してください。
- イメージのビルド中にアプリケーション構成をロードすると、アプリケーションの起動を高速化できます。イメージビルド時のクラス初期化を参照してください。
- ビルド出力には、ネイティブイメージを最大限に活用するのに役立つその他の推奨事項が記載されている場合があります。ビルド出力: 推奨事項を参照してください。