プロファイルに基づく最適化
GraalVM Enterpriseでは、プロファイルに基づく最適化(PGO)を適用して、パフォーマンスとネイティブ・イメージのスループットを向上させることができます。PGOを使用すると、プロファイリング・データを事前に収集してからネイティブ・イメージ・ビルダーにフィードでき、この情報に基づいて結果のバイナリのパフォーマンスが最適化されます。
ノート: この機能は、GraalVM Enterpriseでのみ使用できます。
ここでは、OptimizedImage.javaサンプル・プログラムを使用して、最適化されたネイティブ・イメージをビルドする方法を示します。
1. ラムダ式を使用してArrayList
を反復処理する次のJavaプログラムをファイルに保存し、コンパイルします:
import java.util.ArrayList;
class OptimizedImage {
public static void main(String[] args) {
ArrayList<String> languages = new ArrayList<>();
languages.add("JavaScript");
languages.add("Python");
languages.add("Ruby");
System.out.print("ArrayList: ");
languages.forEach((e) -> {
System.out.print(e + ", ");
});
}
}
javac OptimizedImage.java
2. --pgo-instrument
オプションを追加して計測済ネイティブ・イメージをビルドします。この方法で実行すると、コード実行頻度プロファイルが収集されます:
native-image --pgo-instrument OptimizedImage
3. 次の計測済イメージを実行します。結果は、特に指定がなければprofile.iprofファイルに保存されます:
./optimizedimage
4. 最後に、profile.iprofファイルのパスを指定して2つ目のネイティブ・イメージを作成し、実行します。
native-image --pgo=profile.iprof OptimizedImage
./optimizedimage
インストゥルメントされたネイティブ・イメージの実行時にプロファイルを書き込む場所を指定するには、実行時に-XX:ProfilesDumpFile=YourFileName
オプションを渡します。また、異なる名前を指定して複数のプロファイル・ファイルを収集し、イメージ・ビルドに追加できます。