JIT コンパイラーは何をしますか? 質問する

JIT コンパイラーは何をしますか? 質問する

ちょうど Google IO のビデオを見ていて、Android に組み込まれた JIT コンパイラについての話がありました。JIT コンパイラによるパフォーマンス向上のデモが紹介されていました。JIT コンパイラは具体的に何をするのか知りたかったので、いろいろな人の話を聞きたいと思いました。

では、JIT コンパイラの役割は何でしょうか?

ベストアンサー1

Javaコードは通常バイトコードとして配布され、マシンに依存しない疑似コード(同じアイデアは以前にも使われていましたUCSD-p システム(70 年代に開発されました。) この利点は、同じアプリケーションを異なるプロセッサやオペレーティング システムで実行できることです。また、バイトコードはコンパイルされたアプリケーションよりも小さくなることがよくあります。

欠点は、コードの解釈が遅いコンパイルされたコードを実行する場合と比較して、この問題を解決するには、JIT コンパイラが開発されました。JIT コンパイラは、コードが実行される直前にコードをマシン コードにコンパイルします。これにより、インタープリタに比べて実行速度が速くなりますが、プログラムが実行されるたびにコンパイルに追加の時間がかかります。また、JIT コンパイラは高速にコンパイルする必要があるため、静的コンパイラで使用される複雑な最適化手法は使用できません。

もう一つのアプローチはホットスポットコンパイル。最初はインタープリタとして実行されますが、どのルーチンが最も頻繁に使用されるかを検出し、それらだけをコンパイルします。利点は、コンパイルによる初期遅延がないことです。さらに、HotSpot コンパイラは実行中にプロファイリングを行い、最も重要なルーチンに対して強力な最適化を実行します。同じアプリケーションを何度も実行すると、より高速に実行できるように情報を収集することもあります。HotSpot コンパイルの詳細については、この記事(リンクを提供してくれた Pangea に感謝します)。

もちろん、JIT コンパイラを使用する代わりに、静的コンパイラを使用してマシンのバイトコードをコンパイルすることもできます。これにより、完全な最適化が可能になり、アプリケーションを実行するたびに再度コンパイルする必要がなくなります。ただし、電話や Web ページでは、コード (またはアプレット) を 1 回だけ実行することが多いため、JIT コンパイラの方が適している場合があります。

アップデート

Python バイトコード ファイルの拡張子は .py です。バイトコード ファイルを実行すると、Python JIT コンパイラーはコンパイルされたファイル .pyc を生成します。次に同じプログラムを実行するときに、.py ファイルが変更されていない場合は再度コンパイルする必要はなく、代わりに Python は以前にコンパイルされた .pyc ファイルを実行します。これにより、プログラムの起動が高速化されます。

おすすめ記事