技術ノート プログラミング ジャストインタイム (JIT) コンパイルとは何ですか?

ジャストインタイム (JIT) コンパイルとは何ですか?

ジャストインタイム (JIT) コンパイルとは何ですか?

ジャストインタイム コンパイル (JIT) は、JavaScript、C#、Java などの言語のランタイム インタプリタで使用される手法で、実行速度を C++ などのプリコンパイルされたバイナリ言語が提供するネイティブ パフォーマンスに近づけます。

コンパイラーとインタープリター

ジャストインタイム (JIT) コンパイルとは何ですか?

コンピューターは、少なくとも直接的には、C++ のような高級プログラミング言語を実行する方法を知りません。人間が読めるコードを CPU で実行できるものに変換するには、コードを変換する必要があります。コンピュータは通常、コンパイルまたは解釈という 2 つの方法のいずれかを使用してこれを実行します。

ジャストインタイム (JIT) コンパイルとは何ですか?

コンパイルには、アプリケーションを実行する前に、ソース コードを取得してバイナリ マシン コードに変換するプログラムであるコンパイラーを実行することが含まれます。コンパイルは、パッケージ化されて発送される前に、開発者のコ​​ンピューター上で行われます。ダウンロードした実行可能ファイルのほとんどは、マシン上で実行できるようにあるレベルでコンパイルされており、コンパイラが特定のマシンに合わせて最適化できるため、コンパイルされたコードは通常非常に高速です。

ジャストインタイム (JIT) コンパイルとは何ですか?

ただし、コンパイラにはいくつかの欠点があります。プログラムは、特定の CPU 命令セット (x86-64 や ARM など) 用にコンパイルする必要があります。さらに、命令セットを共有するオペレーティング システム (どちらも Intel CPU で動作する Windows や Linux など) であっても、動作方法に多くの違いがあるため、プログラムを個別にコンパイルする必要があります。

これは、接続されているクライアントにインターネット経由で送信する必要がある JavaScript などの場合、クライアントが命令セットとオペレーティング システムの任意の組み合わせを実行している可能性があるため、事前にコンパイルすることができないことを意味します。

通訳者は異なるアプローチをとります。インタプリタは基本的に、JavaScript や Python スクリプトなどのプログラムのソース コードを受け取り、実行時に実行を処理するソフトウェア ロボットです。これは基本的に、ソース コードとマシンの間の中間層として機能し、コンパイラーがソース コードを直接変換する場所に位置します。

これには、特定のマシン用にプログラムを構築する必要がないという大きな利点があります。マシンが Python インタープリターを実行できる限り、任意の Python スクリプトを実行できます。

ジャストインタイム (JIT) コンパイルとは何ですか?

JIT コンパイルは何をするのですか?

残念ながら通訳者は遅いです。真のインタプリタは、すべての命令を翻訳して処理する必要があり、基本的に実行ごとにコンパイラの仕事を実行します。これはオーバーヘッドが大きいため、実際には、V8 JavaScript エンジン、Java 仮想マシン (JVM)、.NET の共通言語ランタイムなどのほとんどのインタープリターは、ジャストインタイム コンパイルを利用してインタープリターを高速化しています。

ジャストインタイム コンパイルは、本質的には、必要なときにのみ各関数のコードを先延ばしにしてコンパイルするコンパイラです。関数を呼び出すたびに、JIT コンパイラーがその関数をまだ認識していない場合は、その関数がコンパイルされ (実行中のマシンに最適化が適用されます)、実行されます。次回この関数を呼び出すときは、マシン コードがすでに手元にあるため、キャッシュからそれを検索するだけで済みます。

ジャストインタイムとは、インタープリターがアプリ全体を一度にコンパイルする必要がないという事実を指します。確かにその可能性はありますが、大規模なアプリの場合、起動時間が非常に長くなります。必要なとき (つまり、ジャストインタイム) にのみコンパイルを実行する方がパフォーマンスが向上します。

ジャストインタイム (JIT) コンパイルとは何ですか?

JIT コンパイルはパフォーマンスに影響を与えますか?

JIT は文字通り、通常のインタープリターよりもパフォーマンスが向上するだけなので、まったく実行しない場合と比べてはるかに高速です。ただし、コードのコンパイルはそれほど高速ではないため、実行時にコンパイルを実行すると、事前にバイトコードに直接コンパイルした場合と比較して、明らかにパフォーマンスが低下します。

ただし、JIT コンパイルは通常、関数が初めて呼び出されるときにのみ実行する必要があるため、一般的に使用される関数で実際にパフォーマンスが低下するのは最初の呼び出し時だけです。これは、StopWatches を使用して C# でテストできます。StopWatches は、関数の最初の実行時に JIT コンパイルに費やした時間など、.NET の「バックグラウンド ノイズ」を拾います。

JIT コンパイルされたアプリケーションの主な欠点は、起動時に呼び出される何千もの関数を最初にコンパイルする必要があるため、コールド スタートアップに時間がかかることです。一部の ASP.NET Web アプリケーションは、起動時に JIT コンパイラーに大きな負荷がかかることが原因の 1 つとして、ブートストラップに 1 分以上かかることがあります。

「ジャストインタイム (JIT) コンパイルとは何ですか?」に関するベスト動画選定!

ジャストインタイムコンパイラ
オブジェクト指向のクラスのコンストラクタを超ざっくり解説!【何となく理解するIT】