プロファイルに基づく最適化

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オプションを渡します。また、異なる名前を指定して複数のプロファイル・ファイルを収集し、イメージ・ビルドに追加できます。