web-dev-qa-db-ja.com

JavaコンパイラとJVMはどの言語で書かれていますか?

Java コンパイラjavac)、仮想マシン(JVM)、およびJavaスターターはどの言語で書かれていますか?

184
Rahul Garg

質問の正確な言い回しは少し誤解を招く可能性があります: "JVM"または "the compiler"ではありません- 複数のJVMベンダー(jrockitは1つ、IBMは別)および複数のコンパイラー.

  • Sun JVMCで記述されていますが、必ずしもそうである必要はありません-マシンで実行されるJVMはプラットフォームです-dependent実行可能ファイル、したがってcouldは元々任意の言語で記述されていました。たとえば、元のIBM JVMはSmalltalkで記述されました

  • Javaライブラリ(Java.langJava.utilなど、しばしばJava AP​​I)と呼ばれますそれ自体はJavaで記述されていますが、nativeとマークされたメソッドはCまたはC++で記述されます。

  • Sunが提供するJavaコンパイラもJavaで書かれていると思います。 (再び、複数のコンパイラがあります)

160
oxbow_lakes

最初のJavaコンパイラはSun Microsystemsによって開発され、C++のライブラリを使用してCで作成されました。現在、JavaコンパイラはJavaで記述されていますが、JREはCで記述されています。

JavaコンパイラがJavaで次のように記述されていることが想像できます。

JavaコンパイラはJavaプログラムとして記述され、C(最初のJavaコンパイラ)で記述されたJavaコンパイラでコンパイルされます。したがって、新しくコンパイルされたJavaコンパイラー(Javaで記述された)を使用して、Javaプログラムをコンパイルできます。

68
shrinath

Java Docs から

コンパイラはJavaで記述され、ランタイムはANSI Cで記述されています

62
Sev

実際、Oracle JVMはCではなくC++で記述されています。

ここのHotSpot JVMコードを見てください: http://openjdk.Java.net/groups/hotspot/

16
UrbenLegend

このリンク 質問に答える必要があります

コンパイラは現在Javaで記述されているようですが、ランタイムはANSI Cで記述されています

9
micmoo

原則としてほとんどすべて、通常はC

8
djna

Jikes RVM 、研究目的で広く使用されているセルフホスティングJVMはJavaで記述されています。それは人々がデスクトップで実行するものではありませんが、「今度は言語の一般的な力を見せてあげましょう」という私のリストに載っています。

3
Sam Harwell

Sunが提供するiircであるHotspot JVMについて話していると仮定すると、C++で記述されています。 Java用のさまざまな仮想マシンの詳細については、この link を確認してください。 javacは、ほとんどのJavaコンパイラと同様に、Javaで記述されています。

3