Java コンパイラ(javac
)、仮想マシン(JVM)、およびJava
スターターはどの言語で書かれていますか?
質問の正確な言い回しは少し誤解を招く可能性があります: "JVM"または "the compiler"ではありません- 複数のJVMベンダー(jrockitは1つ、IBMは別)および複数のコンパイラー.
Sun JVMはC
で記述されていますが、必ずしもそうである必要はありません-マシンで実行されるJVMはプラットフォームです-dependent実行可能ファイル、したがってcouldは元々任意の言語で記述されていました。たとえば、元の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 Docs から
コンパイラはJavaで記述され、ランタイムはANSI Cで記述されています
実際、Oracle JVMはCではなくC++で記述されています。
ここのHotSpot JVMコードを見てください: http://openjdk.Java.net/groups/hotspot/
このリンク 質問に答える必要があります
コンパイラは現在Javaで記述されているようですが、ランタイムはANSI Cで記述されています
原則としてほとんどすべて、通常はC
Jikes RVM 、研究目的で広く使用されているセルフホスティングJVMはJavaで記述されています。それは人々がデスクトップで実行するものではありませんが、「今度は言語の一般的な力を見せてあげましょう」という私のリストに載っています。
Sunが提供するiircであるHotspot JVMについて話していると仮定すると、C++で記述されています。 Java用のさまざまな仮想マシンの詳細については、この link を確認してください。 javacは、ほとんどのJavaコンパイラと同様に、Javaで記述されています。