229

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

4

9 に答える 9

189

質問の正確な言い回しは少し誤解を招きます。複数のJVMベンダー(jrockitは1つ、IBMは別)と複数のコンパイラーが存在するため、 「JVM」「コンパイラー」ではありません。

  • Sun JVMはで記述されてCいますが、そうである必要はありません。マシン上で実行されるJVMはプラットフォームに依存する実行可能ファイルであるため、元々は任意の言語で記述されている可能性があります。たとえば、元のIBMJVMはSmalltalkで記述されていました

  • Javaライブラリ(など、多くの場合Java APIと呼ばれjava.langますはそれ自体がJavaで記述されていますが、としてマークされたメソッドはまたはで記述されています。java.utilnativeCC++

  • Sunが提供するJavaコンパイラもJavaで書かれていると思います。(繰り返しになりますが、そこには複数のコンパイラがあります)

于 2009-08-03T06:47:01.030 に答える
126

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

JavaコンパイラがJavaでどのように記述されたかは次のように想像できます。

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

于 2013-07-21T17:09:07.807 に答える
70

Javaドキュメントから

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

于 2009-08-03T06:45:05.620 に答える
18

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

ここでHotSpotJVMコードを見てください:http://openjdk.java.net/groups/hotspot/

于 2012-02-29T22:36:40.173 に答える
10

原則としてほとんど何でも、通常はC

于 2009-08-03T06:44:57.367 に答える
10

このリンクはあなたの質問に答えるはずです

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

于 2009-08-03T06:45:18.990 に答える
4
  • JavaがSunMicrosystemによって導入されたとき、JavaコンパイラはC++のいくつかのライブラリを使用してCで記述されていました。
  • コンパイラー設計にはブートストラップと呼ばれる概念があるため、主にコンパイラー開発で使用されます。ブートストラップ法は、コンパイル対象のソースプログラミング言語でコンパイラー(またはアセンブラー)を作成するプロセスです。これは、セルフホスティングコンパイラを作成するために使用されます。新しいプログラミング言語用のコンパイラの開発は、最初に既存の言語で開発され、次に新しい言語で書き直され、それ自体でコンパイルされました。 そのため、今日、JavaコンパイラはJava自体で記述されています
  • Java仮想マシン: Java仮想マシンは抽象マシンです。実際のコンピューティングマシンのように、それは命令セットを持ち、実行時のさまざまなメモリ領域を操作します。通常、JVMはバイトコードをマシンコードに解釈します。

(詳細については、次のリンクを確認できます:https ://docs.oracle.com/javase/specs/jvms/se7/html/ )

于 2020-03-26T10:48:28.133 に答える
3

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

于 2009-08-03T06:46:57.363 に答える
3

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

于 2009-08-03T06:51:38.100 に答える