AOT コンパイラー

Ahead-Of-Time (AOT) コンパイルにより、同じプログラムの後続の実行のために、Java™ クラスをネイティブ・コードにコンパイルすることができます。 AOT コンパイラーは、クラス・データ共有フレームワークと連携します。

AOT コンパイラーは、アプリケーションの実行中に動的にネイティブ・コードを生成し、生成された AOT コードを共有データ・キャッシュ内にキャッシュします。 メソッドを実行する後続の JVM は、共有データ・キャッシュから AOT コードをロードして使用することができます。その際、JIT コンパイルしたネイティブ・コードで発生するパフォーマンス低下が起こることはありません。

AOT コンパイラーはデフォルトで有効になっていますが、共有クラスが有効な場合にのみアクティブになります。 デフォルトでは、共有クラスは無効になっているため、AOT アクティビティーが発生することはありません。 AOT コンパイラーはアクティブになると、起動時間の改善を主目的として、AOT コンパイルするメソッドを選択します。

注: AOT コードはさまざまなプログラム実行にわたって持続する必要があるため、AOT 生成コードは JIT 生成コードと同様には実行されません。 AOT コードは通常、解釈されたコードよりもパフォーマンスが優れています。

AOT コンパイラーがない JVM、または AOT コンパイラーが無効になっている JVM の場合、JIT コンパイラーは頻繁に使用されるメソッドを最適化されたネイティブ・コードに選択的にコンパイルします。 JIT コンパイラーはアプリケーションの稼働中に動作するため、メソッドのコンパイルに関連する時間コストが発生します。 メソッドは最初に解釈する必要があり、ほとんどの JIT コンパイルは起動時に実行されるので、起動時間が長くなることがあります。

開始時のパフォーマンスは、共有 AOT コードを使用してコンパイル不要のネイティブ・コードを提供することで改善できます。 メソッドの AOT コードを共有データ・キャッシュからロードして実行中のプログラムにバインドするにはわずかな時間コストがかかります。 時間コストは JIT コンパイラーを使用してそのメソッドをコンパイルする時間と比較すると低いものです。

-Xshareclassesオプションを使用すると、共有クラスを使用可能にすることができます。これにより、AOTが使用可能になっている場合にAOTコンパイラーをアクティブにすることもできます。