JVMについて非常に基本的な質問があります。それはコンパイラですか、それともインタプリタですか。
インタプリタの場合、JVM内に存在するJITコンパイラはどうですか?
どちらでもない場合、JVMとは正確には何ですか?(バイトコードをマシン固有のコードに変換するというjVMの基本的な定義などは必要ありません)
JVMについて非常に基本的な質問があります。それはコンパイラですか、それともインタプリタですか。
インタプリタの場合、JVM内に存在するJITコンパイラはどうですか?
どちらでもない場合、JVMとは正確には何ですか?(バイトコードをマシン固有のコードに変換するというjVMの基本的な定義などは必要ありません)
回答:
まず、次の用語について明確に考えてみましょう。
Javac
isJavaコンパイラ-Javaコードをバイトコードにコンパイルします
JVM
Java仮想マシンです-バイトコードを実行/解釈/ネイティブマシンコードに変換します
JIT
is Just In Timeコンパイラ-ネイティブで実行する前に、実行時に指定されたバイトコード命令シーケンスをマシンコードにコンパイルします。主な目的は、パフォーマンスを大幅に最適化することです。
それでは、あなたの質問に対する答えを見つけましょう。
1)JVM: is it a compiler or an interpreter?
-回答:通訳
2)what about JIT compiler that exist inside the JVM?
-回答:この返信を完全に読んだら、おそらく今それを知っているでしょう
3)what exactly is the JVM?
-回答:
.class
ファイルをRAMにロードしますこれがお役に立てば幸いです。
それは両方のほんの少しですが、伝統的な意味ではどちらでもありません。
最新のJVMはバイトコードを受け取り、最初に必要になったときにネイティブコードにコンパイルします。この文脈での「JIT」は「ジャストインタイム」を意味します。これは外部からのインタプリタとして機能しますが、実際には舞台裏でマシンコードにコンパイルされています。
JVMは、ソースコードをバイトコードにコンパイルするJavaコンパイラと混同しないでください。したがって、それを「コンパイラ」と見なすことは有用ではありませんが、バックグラウンドで何らかのコンパイルを行うことを知っておくのは有用ではありません。
.dex
、直接解釈またはジャストインタイム(JIT)コンパイル...を経由してコードを」(source.android.com/devices/tech/ota/ab/...)
両方です。それはバイトコードを解釈することから始まり、(それが価値があると判断した場合)次にそのバイトコードをネイティブマシンコードにコンパイルすることができます。
Javacはコンパイラですが、従来のコンパイラではありません。コンパイラは通常、実行のためにソースコードをマシンレベルの言語に変換します。これはシングルショットで実行されます。つまり、コード全体が取得され、ONCEでマシンレベルの言語に変換されます。(これについては以下で詳しく説明します)。一方、JavaCはそれをマシンレベルの言語ではなくバイトコードに変換します。
JITはJavaコンパイラですが、インタプリタとしても機能します。一般的なコンパイラは、すべてのコードをソースコードからマシンレベルの言語に一度に変換します。代わりに、JITは行ごとに実行され(行ごとの実行はインタープリターの機能です)、JavaCによって生成されたバイトコードをマシンレベルの言語に変換して実行します。JITを含むJVMには複数の実装があります。ホットスポットは、Javaプログラミングの主要なものの1つです。ホットスポットの実装により、JITは、反復するコードのチャンクを一度にマシンレベルの言語に変換することで実行を最適化し(上記のコンパイラのように)、コードの各行を1つずつ変換する代わりに高速に実行できるようにします。コンパイラとインタープリターの典型的な定義に関して、答えは白黒ではありません。
これは、いくつかのオンライン回答やブログなどを読んだ後の私の理解です。誰かがこの理解を向上させるための提案を持っている場合は、遠慮なく提案してください。
JVMには、コンパイラとインタプリタの両方があります。コンパイラがコードをコンパイルしてバイトコードを生成するためです。その後、インタプリタはバイトコードをマシンが理解できるコードに変換します。
例:プログラムを作成してコンパイルすると、Windowsで実行されます。.classファイルを別のOS(Unix)に移動すると、バイトコードをマシンが理解できるコードに変換するインタープリターが原因で実行されます。