Java がコンパイル言語とインタープリター言語の両方であるのはなぜですか?
最初に、javac (コンパイル) を使用して Java プログラムをコンパイルし、java (解釈) を使用してプログラムを実行します。その利点は何ですか?
また、JIT の役割はどこに現れますか?
Java がコンパイル言語とインタープリター言語の両方であるのはなぜですか?
最初に、javac (コンパイル) を使用して Java プログラムをコンパイルし、java (解釈) を使用してプログラムを実行します。その利点は何ですか?
また、JIT の役割はどこに現れますか?
Java コンパイラは通常、ソース コードを中間言語にコンパイルします。これは一般的に「バイト コード」と表現されます。それ自体はネイティブ ハードウェアのマシン コードではありませんが、ある意味では、Java 仮想マシンの「マシン」コードです。
この分離の利点は、(理論的には) 多くの異なるプラットフォームに VM を実装できることですが、それらのすべてが同じコンパイル済み Java バイト コードを実行できるようになります。
ジャストインタイム コンパイラは仮想 VM の一部であり、必要に応じて実際にバイト コードのビットを実際のネイティブ マシン コードに動的に変換します。これは、純粋に VM で Java プログラムを実行すると、同等のネイティブ コードよりもはるかに遅いという観察から生まれました。JIT コンパイルにより、ネイティブにコンパイルされたコードと比較した場合、Java VM はパフォーマンスの点で競争力のあるものになりました。
一度コンパイルすればどこでも実行できることが理由の 1 つです。
JVM は OS 固有です。そのため、JVM はコンパイルされた .class (バイト コード) ファイルを解釈し、マシン固有の命令セットに変換します。
Java JIT の詳細については、次の記事を参照してください。