2

JIT コンパイラーによってバイトコードをマシンコードにコンパイルするという概念については、まだよくわかりません。非 JIT インタープリターよりも高速なコードを生成する理由を知りたいです。このプロセスがどのように行われるかについて、誰かが私に良い例を教えてもらえますか?

4

3 に答える 3

27

百万回実行する必要があるループがあるとします。

「真の」インタープリターは、ループの各反復で this のバイトコードを見て、コードがシステム状態 (呼び出しなど) にどのような影響を与えるべきかを判断する必要があります。

JIT コンパイラは、バイトコードを 1 度だけ見てコンピュータが直接理解できるネイティブ コードにコンパイルします。それ以上の変換は必要ありません。翻訳には時間がかかるので、一度で済むと効率的です。

実際の例を挙げると、英語の小説があり、それに興味を持ったフランス人が何人かいた場合、両方の言語を知っている人にその本を渡すことができますまたは、その人に本を持ってきてもらい、それをフランス語に翻訳してもらい、各フランス人にフランス語で書かれた本のコピーを渡すこともできます。本に興味を持っている人が 1 人だけの場合は、オンザフライ翻訳の方が効率的です。コピー エディター、レイアウト スペシャリスト、プリンターなどは必要ありません。本を読んでから、より完全な 1 回限りの翻訳を行う方が理にかなっています。


1 HotSpot のものを含む一部の JIT は、用途に応じて、異なる最適化レベルで同じコードを実際に数回 JIT コンパイルします。

于 2012-01-09T13:21:23.227 に答える
1

JIT でコンパイルされたコードは実際にはベア メタル上で直接実行されますが、解釈されたコードはインタープリターによって継続的に再解釈される必要があります。インタープリターは、バイトコードを再処理して再処理する必要がなくなりました。

于 2012-01-09T13:28:37.817 に答える