パワーノード SpringBoot3 メモ ⑨ AOT と GraalVM を理解する

9 AOT と GraalVM について

9.1 パフォーマンスを提供するテクノロジー

AOT とは:
Ahead-of-Time Compilation: プリコンパイル (コンパイルの前) JEP-295 に記載されており、Java 9 で実験的な機能として追加されました。
AOT は、Java プログラムのパフォーマンス、特に JVM の起動時間を向上させる方法です。仮想マシンを起動する前に、Java クラスをネイティブ コードにコンパイルします。小規模および大規模な Java アプリケーションの起動時間を短縮します。

JIT (just in time) :
JIT は、JVM の実行速度を向上させるための技術で、JVM が Java バイトコードを実行し、頻繁に実行されるコードをネイティブ コードにコンパイルします。これは、ジャストインタイム (JIT) コンパイルと呼ばれます。
JVM は、特定のメソッドまたはコード ブロックが特に頻繁に実行されることを検出すると、それを「ホット スポット コード」と見なします。次に、JIT は「ホット コード」をローカル マシンに関連するマシン コードにコンパイルして最適化し、コンパイルされたマシン コードを次回使用するためにキャッシュします。
JVM は、実行中に収集されたプロファイリング情報に基づいて、JIT コンパイルするコードを決定します。JIT コンパイラーは高速ですが、Java プログラムは非常に大きいため、JIT が完全にウォームアップするまでに長い時間がかかります。あまり使用されない Java メソッドはまったくコンパイルされない可能性があります。

機能: プログラムを実行すると、コードを実行しながらコンパイルされます。JIT コンパイルには時間オーバーヘッドとスペース オーバーヘッドが必要なので、頻繁に実行されるコードのみがコンパイルの価値があります。

AOT: 静的
JIT: 動的

9.2 ネイティブイメージ

ネイティブイメージ: ネイティブイメージ (ネイティブイメージ)

ネイティブ イメージは、Java コードを事前にコンパイルしてスタンドアロンの実行可能ファイル (
ネイティブ イメージと呼ばれる) を作成するテクノロジです。イメージは実行用のファイルです。
ミラーファイル(ネイティブイメージ)は、ミラー構築技術(ツール)により生成されます。
ネイティブ イメージは専門用語であるだけでなく、生成された実行可能ファイルのことも指します。
ネイティブ イメージは、Java、Scala、Clojure、Kotlin などの JVM ベースの言語をサポートします。

ネイティブ イメージ ファイルのコンテンツには、アプリケーション クラス、その依存関係からのクラス、ランタイム ライブラリ クラス、JDK から静的にリンクされたネイティブ コード (追加の JDK インストールなしでバイナリ ファイルを直接実行できます) が含まれており、ネイティブ イメージは GraalVM 上で実行され、より高速に動作します。起動時間が短縮され、実行時のメモリのオーバーヘッドが低くなります。

AOT モードでは、コンパイラはプロジェクトのビルド中にすべてのコンパイル作業を実行します。ここでの主なアイデアは、すべての「重労働」、つまり高価な計算をビルド時間に移すことです。つまり、特定の実行クラスやファイルなど、プロジェクトで実行する必要があるすべてのものを準備します。最後に、準備したファイルが実行されますが、この時点でアプリケーションは素早く起動できます。メモリ、CPU オーバーヘッドを削減します (ランタイム JIT コンパイルは不要)。すべてが事前に計算され、プリコンパイルされているためです。

9.3 ネイティブイメージビルダー

ネイティブ イメージ ビルダー (イメージ ビルダー): JDK のクラスを含む、アプリケーションのすべてのクラスとその依存関係を処理するためのユーティリティです。このデータを静的に分析して、アプリケーションの実行中にどのクラスとメソッドにアクセスできるかを判断します。次に、到達可能なコードとデータを、特定のオペレーティング システムとアーキテクチャ向けのネイティブ実行可能ファイルにプリコンパイルします。

9.4 グラールVM

GraalVM は、JavaScript、Ruby、Python、およびその他の多くの一般的な言語をサポートしながら、Java およびその他の JVM 言語で書かれたアプリケーションを高速化するように設計された高性能 JDK ディストリビューションです。GraalVM の多言語機能により、外国語呼び出しのコストを削減しながら、単一のアプリケーション内で複数のプログラミング言語を混在させることができます。GraalVM は、複数の言語をサポートする仮想マシンです。

GraalVM は OpenJDK の代替手段であり、事前 (AOT) コンパイルをサポートするネイティブ イメージと呼ばれるツールが含まれています。GraalVM は、ネイティブ イメージ ファイルをより高速に実行し、CPU とメモリの使用量を減らし、ディスク サイズを小さくします。これにより、クラウドにおける Java の競争力が高まります

現在、AOT の焦点は、GraalVM を使用して Spring アプリケーションをネイティブ イメージとしてデプロイできるようにすることです。GraalVM ソリューションは、Spring Boot 3 でネイティブ イメージのサポートを提供するために使用されます。

GraalVM の「ネイティブ イメージ」ツールは、Java バイトコードを入力として受け取り、ネイティブ実行可能ファイルを出力します。これを行うために、ツールはバイトコードに対して静的分析を実行します。分析中に、ツールはアプリケーションが実際に使用するすべてのコードを検索し、不要なものをすべて削除します。ネイティブ イメージはクローズドな静的解析とコンパイルであり、クラスの動的ロードはサポートされていません。プログラムの動作に必要なすべての依存関係は静的解析フェーズで完了します。

9.5 AOT の操作手順:

SpringBoot または Spring を使用してプロジェクトを作成し、GraalVM のネイティブ イメージ ビルドによってネイティブ イメージ ファイルが生成され、そのイメージ ファイルが GraalVM 上で実行されます。

おすすめ

転載: blog.csdn.net/f5465245/article/details/130152164