最適化とパフォーマンス

ネイティブイメージは、パフォーマンス、ファイルサイズ、ビルド時間、デバッグ容易性、その他の指標に関して、生成されたバイナリを最適化するためのさまざまなメカニズムを提供します。

最適化レベル #

gccclangと同様に、ユーザーは-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コンパイラーとして実行しているときと同様に、プロファイリング情報を活用できます。このためには、次の手順を実行します。

  1. --pgo-instrumentを使用してアプリケーションをビルドします。
  2. プロファイリング情報を生成するために、代表的なワークロードを使用して、インストルメント化されたアプリケーションを実行します。この実行から収集されたプロファイルは、デフォルトでdefault.iprofファイルに保存されます。
  3. --pgoオプションを使用してアプリケーションをリビルドします。カスタムの.iprofファイルを--pgo=<your>.iprofで渡すことができます。それ以外の場合は、default.iprofが使用されます。これにより、イメージがリビルドされ、アプリケーションの最適化されたバージョンが生成されます。

このトピックの詳細については、プロファイルガイド最適化の基本的な使い方を参照してください。

特定のマシンへの最適化 #

ネイティブイメージは、gccclangと同様に機能する-marchオプションを提供します。これにより、ユーザーは、コードをネイティブにコンパイルするときに、Graalコンパイラーが使用できる命令のセットを制御できます。デフォルトでは、ネイティブイメージはx64ではx86-64-v3AArch64ではarmv8-aを使用します。利用可能なすべてのマシンタイプを一覧表示するには、-march=listを使用します。生成されたバイナリが、デプロイされるマシンタイプと同じまたは類似のマシンタイプでビルドされている場合は、-march=nativeを使用します。このオプションは、バイナリが生成されるマシンで利用可能なすべての命令を使用するようにコンパイラーに指示します。一方、生成されたバイナリが、多くの異なる、場合によっては非常に古いマシンを持つユーザーに配布される場合は、-march=compatibilityを使用します。これにより、コンパイラーが使用する命令のセットが最小限に抑えられ、生成されたバイナリの互換性が向上します。

追加機能 #

ネイティブイメージは、生成されたバイナリをさらに最適化するための追加機能を提供します。

  • 適切なガベージコレクターを選択し、ガベージコレクションポリシーを調整することで、GC時間を短縮できます。メモリ管理を参照してください。
  • イメージのビルド中にアプリケーション構成をロードすると、アプリケーションの起動を高速化できます。イメージビルド時のクラス初期化を参照してください。
  • ビルド出力には、ネイティブイメージを最大限に活用するのに役立つその他の推奨事項が記載されている場合があります。ビルド出力: 推奨事項を参照してください。

お問い合わせ