Java コンパイラ(javac
)、仮想マシン(JVM)、java
スターターはどの言語で記述されていますか?
Java コンパイラ(javac
)、仮想マシン(JVM)、java
スターターはどの言語で記述されていますか?
回答:
質問の正確な言い回しは少し誤解を招くさ:それはないです「JVM」または「コンパイラ」があるので、複数のJVMベンダー(JRockitは、IBM別のものである)と、複数のコンパイラがそこに。
日JVMがさで書かれたC
このある必要はないが、 -それはあなたのマシン上で動作するようJVMでプラットフォーム依存の実行可能となり可能性があり、もともと任意の言語で書かれています。たとえば、元のIBM JVMはSmalltalkで作成されました
(Javaライブラリjava.lang
、java.util
しばしばと呼ばれるなど、JavaのAPIはとしてマークされた方法があるが)自体は、Javaで書かれているnative
で書かれていますC
かC++
。
Sunが提供するJavaコンパイラもJavaで書かれていると思います。(ここでも、複数のコンパイラがあります)
最初のJavaコンパイラはSun Microsystemsによって開発され、C ++のいくつかのライブラリを使用してCで書かれました。現在、JavaコンパイラはJavaで記述されていますが、JREはCで記述されています。
Javaコンパイラが次のようにJavaでどのように記述されたかを想像できます。
JavaコンパイラはJavaプログラムとして記述され、Cで記述されたJavaコンパイラ(最初のJavaコンパイラ)でコンパイルされます。したがって、新しくコンパイルされたJavaコンパイラー(Javaで作成)を使用してJavaプログラムをコンパイルできます。
コンパイラはJavaで記述され、ランタイムはANSI Cで記述されています
実際、Oracle JVMはCではなくC ++で書かれています。
こちらのHotSpot JVMコードをご覧ください:http : //openjdk.java.net/groups/hotspot/
研究目的で広く使用されているセルフホスティングJVMであるJikes RVMは、Javaで記述されています。それは、人々がデスクトップで実行するものではありませんが、私の「私の言語の一般的な力を見せびらかそう」という私のリストの上の方にあります。
(詳細については、このリンクを確認できます:https : //docs.oracle.com/javase/specs/jvms/se7/html/)