7

「解釈」と「コンパイル」に関する多くの定義とステートメントを読みました。しかし、私はまだ非常に混乱しています。

技術的に言えば、内部での解釈とコンパイルの本当に違いは何ですか?私に詳しく説明させてください(私が持っているかもしれない間違った概念を訂正してください):

Javaでは、ソースコードはByteCodeに「コンパイル」され、ByteCodeはマシンコードに「解釈」および/または「ジャストインタイムコンパイル」されます。しかし、ジャストインタイムコンパイルと解釈の違いは何ですか?つまり、私の推測では、ホストのCPUはマシンコードのみを実行します。したがって、解釈においても、命令はCPUが理解できる機械語に変換されます。では、ジャストインタイムコンパイルと解釈の間の境界線はどこにあるのでしょうか。

PSこれは私の概念です。それは完全に間違っているかもしれません。その場合は、私の愚かさをお許しください。

ありがとう。

4

5 に答える 5

3

1.率直に言って、Java にコンパイラーとインタープリターの両方があるという考えは神話であり、その動作はコンパイルとインタープリターとしてマークされています。

2. Java コンパイラは、人間が読めるコードをバイト コードにコンパイルします。これは、実行時にJIT (ジャスト イン タイム コンパイラ)によってマシン レベルの実行可能コードに変換されます。

3.ランタイム中、JIT はコードのランタイム集中部分を識別し、それをマシン レベルの実行可能コードに変換します。コードのこの部分は として知られています。これが、 JIT がホットスポット コンパイラと呼ばれるHot-Spot理由です。

4. JIT は、クラス内のメソッドへのポインタである仮想メモリ テーブル(V テーブル) を使用します。Hot-Spot コードはマシン レベルの実行可能コードに変換され、そのアドレスがここに格納されます。この部分が再度呼び出されると、この格納されたアドレスによって直接フェッチされます解釈された動作、およびコンパイルThis behavior of JIT to keep compiling small amount of code during Run time is assumed to be the JIT behaviour of storing this for later use is assumed as

5.仮想メモリ テーブルには、バイト コードのアドレスを格納するテーブルもあり、必要に応じて使用できます。

于 2012-07-19T17:26:56.480 に答える