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


195

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


23
私はJavaで作業しているので、言語について知りたいです... :)
Rahul Garg

25
それはあなたの視点です.20年間何らかの技術に取り組み、インタビュアーがそれがどの言語で書かれているのか、どのように機能しているのかを尋ねると、あなたは気にしないと言うことができます。言語を本当に理解するために。
Rahul Garg、

21
それ以上に、知識が無駄になることはないと思います。したがって、何かを知ることは時間の無駄ではありません。
Rahul Garg、

1
...メカニカルエンジニアまたはレースドライバー(メタファーを伸ばすため)
Epaga 2009

2
車を運転する@paxdiabloはあなたがすることですが、あなたの職業ではありません。レースカーの運転手は、エンジンの動作を気にするかもしれません。私は彼らがすべて気にするというわけではありません。しかし、レースカーの運転手が彼が運転するために支払われる車でエンジンがどのように働いたかについてもっと知りたいと思ったら、それは不当だと思いますか?
JD Isaacks

回答:


171

質問の正確な言い回しは少し誤解を招くさ:それはないです「JVM」または「コンパイラ」があるので、複数のJVMベンダー(JRockitは、IBM別のものである)と、複数のコンパイラがそこに。

  • 日JVMがで書かれたCこのある必要はないが、 -それはあなたのマシン上で動作するようJVMでプラットフォーム依存の実行可能となり可能性があり、もともと任意の言語で書かれています。たとえば、元のIBM JVMはSmalltalkで作成されました

  • (Javaライブラリjava.langjava.utilしばしばと呼ばれるなど、JavaのAPIはとしてマークされた方法があるが)自体は、Javaで書かれているnativeで書かれていますCC++

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


彼は、JVMの起動に使用するプログラム「java」を意味すると思います。
スティーブンC

1
実際、SunのJREの1つのライブラリはNetRexxで作成されています。(これは、BigInteger、BigNum、BigDecimalのいずれかの任意精度の数学ライブラリの1つです。どちらを使用したか忘れてしまいました。)理論的には、Javaプログラムで可能な表現にコンパイルできる限り、任意の言語を使用してJREを実装できます。理解する。
イェルクWミッターク

18
Cで書かれている日JVMを参照してください
モハメド・バナ

8
HotSpot JVMはC ++で作成されています-www2.research.att.com/~bs/applications.html
devdimi

5
@devdimiリンクが壊れ、現在次の場所にあります:stroustrup.com/applications.html
flup

80

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

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

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


31
JavaコンパイラをJavaで作成する方法を説明するための+1 :)
Eduard Luca

2
より基本的なコンパイラでコードをコンパイルして新しいコンパイラに「アップグレード」するこのプロセスは、「ブートストラップ」によって呼び出されるように、「ブートストラップ」と呼ばれます。YouTubeのComputerphileは、これと「Tダイアグラム」についての良いビデオを持っています
iono

それは鶏と卵の問題にも答えますか:)
Skynet

@Skynetセルフホストチキン
sportzpikachu

65

Java Docsから

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


1
Sun Microsystemsによって開発された非常に最初のJavaコンパイラは、C ++ en.wikipedia.org/wiki/Java_compilerの
Rahul Garg

4
これは実際にはかなり古いドキュメントです(一見すると10年以上)。たとえば、「Javaバイトコードはその場でネイティブマシンインストラクションに変換され(解釈され)、どこにも保存されない」とあり、これは約5年間真実ではありませんでした。
oxbow_lakes 2009

2
ええと、特に大規模な変更が行われた後、いつドキュメントが本当に最新のものになったのですか?:)
Esko

まあ-答えは本当に正しくありません。Sun JVMはCで書かれており、Sun javaコンパイラはJavaで書かれています。最初のIBM JVMはSmalltalkで作成されました。
oxbow_lakes 2009

8
何がJavaをコンパイルしますか?Java。さて、どうやってJavaを手に入れますか?コンパイルします。え?


9

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

コンパイラはJavaで書かれているようですが、ランタイムはANSI Cで書かれています


8

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


3

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


はずっと下にいますか?なんらかのマイクロカーネルはありますか?もしそうなら、それはどの言語で書かれていますか?
Raedwald 2013

3

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


0
  • JavaがSun Microsystemによって導入されたとき、JavaコンパイラはC ++のいくつかのライブラリを使用してCで書かれていました。
  • コンパイラ設計にはブートストラップと呼ばれる概念があるため、主にコンパイラ開発で使用されます。ブートストラップは、コンパイルすることを意図したソースプログラミング言語でコンパイラ(またはアセンブラ)を記述するプロセスです。セルフホスティングコンパイラの作成に使用されます。新しいプログラミング言語用のコンパイラの開発は、最初に既存の言語で開発され、次に新しい言語で書き直され、それ自体でコンパイルされます。 それが今日、JavaコンパイラがJava自体で記述されている理由です
  • Java仮想マシン: Java仮想マシンは抽象的なマシンです。実際のコンピューティングマシンのように、命令セットがあり、ランタイムのさまざまなメモリ領域を操作します。通常、JVMはバイトコードをMachineコードに解釈します。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.