gcc
Javaコンパイラは、 Cコードをコンパイルするようにバイナリにコンパイルしますか? それとも、別のものによって解釈される別のタイプの「言語」にコンパイルするだけですか?実行できません。それは、私が思うに、JVM
正しいに違いない?
では、Java は実際には真のコンパイル済み言語ではなく、解釈されますか?
質問をクリアするだけです。
gcc
Javaコンパイラは、 Cコードをコンパイルするようにバイナリにコンパイルしますか? それとも、別のものによって解釈される別のタイプの「言語」にコンパイルするだけですか?実行できません。それは、私が思うに、JVM
正しいに違いない?
では、Java は実際には真のコンパイル済み言語ではなく、解釈されますか?
質問をクリアするだけです。
Java は実際には真のコンパイル済み言語ではなく、解釈されますか?
良い...
Javaがコンパイルされます。ただし、機械語ではなく、バイトコードにコンパイルされます。JVM が解釈できるもの。または、それをさらにコンパイルしてマシンコードにすることもできます。これは、標準 JVM の一部である、いわゆる Hotspot Just-In-Time コンパイラを使用して (少なくともコードの一部で) 実際に発生します。
Perl や Python などの「実際の」インタープリター型言語 (これらも内部表現に「コンパイル」されますが) とは一線を画しているのは、出荷するコードを実行するためにコンパイラーが不要であり、ランタイムだけであるということです。一方、Perl と Python は、実行時に新しいプログラムを「評価」できる必要があります。
Java は、コンパイル言語とインタープリター言語の中間に位置する言語です。
Java プログラムがコンパイルされると、Java ソースコードはプラットフォームに依存しないバイトコードに変換されます。このバイトコードは、人間が判読できるものではなく (アセンブラーに非常に似ています)、ほとんどの CPU で判読できません。
コンパイルされたプログラムが実行されると、このバイトコードは Java 仮想マシンによって解釈され、JVM が実行されているプラットフォームのネイティブ命令に変換されます。
パフォーマンスに関しては、この方法には、ネイティブ マシン コードへのコンパイルよりも欠点と利点の両方があります。
短所は、マシンコードへの変換に時間がかかることです。これは、アプリケーションを最初に実行するとき (起動時間が遅くなる) または実行中に実行する必要があります (実行時のパフォーマンスが低下します)。
しかし一方で、実行時のコンパイルにより、ソフトウェアが実際に実行されているプラットフォーム用に生成されたマシンコードを最適化できますが、事前にコンパイルされたソフトウェアは通常、特定の CPU 用に最適化されています。実行時のコンパイルにより、ジャスト イン タイムの最適化も可能になります。通常のコンパイラーは、プログラムのどの部分が最も頻繁に実行されるかを推測する必要がありますが、JIT オプティマイザーは、実際に実行されているプログラムを監視し、この情報を使用して、実行中にプログラムをより効率的に変更することができます。
それがあなたに役立つことを願っています
Java コンパイラの仕組み