JavaコンパイラとJVMはどの言語で書かれていますか?
質問
Java コンパイラ( javac
)、仮想マシン(JVM)、および java
スターターはどの言語で記述されていますか?
解決
質問の正確な表現はやや誤解を招く可能性があります。複数のJVMベンダーが存在するため、" JVM" または"コンパイラ" ではありません(jrockitは1つ、IBMは別)および複数のコンパイラがあります。
-
Sun 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/
このリンクは質問に答える必要があります
コンパイラは現在Javaで記述されているようですが、ランタイムはANSI Cで記述されています
原則としてほとんどすべて、通常はC
Jikes RVM は、研究目的で広く使用されているセルフホスティングJVMがJavaで記述されています。ユーザーがデスクトップで実行するものではありませんが、「言語の一般的な力を見せてみましょう」という私のリストの上位にあります。
Sunが提供するiircであるHotspot JVMについて話していると仮定すると、C ++で記述されています。 Java用のさまざまな仮想マシンの詳細については、このリンクを確認してください。 javac は、ほとんどのJavaコンパイラと同様、Javaで記述されています。
ほとんどのオペレーティングシステムでは、JVMはISO C ++で記述されています。 ANSI Cが使用されているとは思えません。これは、まったく古い言語であり、現在ではかなり古くなっているためです。