In welcher Sprache sind der Java-Compiler und die JVM geschrieben?


195

In welchen Sprachen sind der Java- Compiler ( javac), die virtuelle Maschine (JVM) und der javaStarter geschrieben?


23
Ich arbeite an Java, also möchte ich etwas über die Sprache wissen ... :)
Rahul Garg

25
Es ist Ihre Perspektive. Nehmen wir an, Sie haben 20 Jahre lang an einer Technologie gearbeitet und der Interviewer fragt Sie, welche Sprache sie geschrieben hat oder wie sie funktioniert. Dann können Sie sagen, dass es Ihnen egal ist, dass Sie nur schreiben möchten, wenn andere in der Sprache nicht wollen die Sprache wirklich verstehen.
Rahul Garg

21
und darüber hinaus denke ich, dass Wissen niemals verschwendet wird. Etwas zu wissen ist also keine Zeitverschwendung.
Rahul Garg

1
... ein Maschinenbauingenieur oder ein Rennfahrer (um die Metapher zu erweitern)
Epaga

2
@paxdiablo Autofahren ist etwas, was Sie tun, aber nicht Ihr Beruf. Rennfahrer könnten sich darum kümmern, wie Motoren funktionieren. Ich sage nicht, dass es sie alle interessiert. Aber wenn ein Rennfahrer mehr darüber wissen wollte, wie der Motor an dem Auto funktioniert, für das er bezahlt wird, würden Sie das für unvernünftig halten?
JD Isaacks

Antworten:


171

Die genaue Formulierung der Frage ist leicht irreführend: Es handelt sich nicht um "die JVM" oder "den Compiler", da es mehrere JVM-Anbieter (Jrockit ist einer, IBM ein anderer) und mehrere Compiler gibt.

  • Die Sun-JVM ist geschrieben C, obwohl dies nicht der Fall sein muss. Die JVM, wie sie auf Ihrem Computer ausgeführt wird, ist eine plattformabhängige ausführbare Datei und könnte daher ursprünglich in einer beliebigen Sprache geschrieben worden sein. Beispielsweise wurde die ursprüngliche IBM JVM in Smalltalk geschrieben

  • Die Java - Bibliotheken ( java.lang, java.utilusw., die oft als bezeichnet die Java API ) sind selbst in Java geschrieben, obwohl sie als markierte Methoden nativewerden in geschrieben wurden , Coder C++.

  • Ich glaube, dass der von Sun bereitgestellte Java-Compiler auch in Java geschrieben ist. (Obwohl es wieder mehrere Compiler gibt)


Ich denke, er meint "Java" das Programm, mit dem Sie eine JVM starten.
Stephen C

1
Tatsächlich ist eine Bibliothek in Suns JRE in NetRexx geschrieben. (Es ist eine der willkürlichen Präzisions-Mathematikbibliotheken, entweder BigInteger, BigNum oder BigDecimal. Ich habe vergessen, welche.) Theoretisch können Sie jede Sprache verwenden, um die JRE zu implementieren, solange sie zu einer Darstellung kompiliert werden kann, die ein Java-Programm kann verstehen.
Jörg W Mittag

18
Bitte geben Sie einen Verweis auf die Sun JVM an, die in C.
Mohamed Bana am

8
Die HotSpot JVM ist in C ++ geschrieben - www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi der Link ist defekt und befindet sich jetzt unter: stroustrup.com/applications.html
flup

79

Der allererste Java-Compiler wurde von Sun Microsystems entwickelt und mit einigen Bibliotheken aus C ++ in C geschrieben. Heute ist der Java-Compiler in Java geschrieben, während die JRE in C geschrieben ist.

Wir können uns vorstellen, wie der Java-Compiler wie folgt in Java geschrieben wurde:

Der Java-Compiler wird als Java-Programm geschrieben und dann mit dem in C (dem ersten Java-Compiler) geschriebenen Java-Compiler kompiliert. Somit können wir den neu kompilierten Java-Compiler (in Java geschrieben) verwenden, um Java-Programme zu kompilieren.


31
+1 für die Erklärung, wie ein Java-Compiler in Java geschrieben werden kann :)
Eduard Luca

2
Zu diesem Zweck wird dieser Prozess des "Upgrades" auf neue Compiler durch Kompilieren ihres Codes in grundlegenderen Compilern als "Bootstrapping" bezeichnet, wie in "Ziehen Sie sich an Ihren Bootstraps hoch", von wo aus ein Computer "gebootet" wird. Computerphile auf YouTube hat ein gutes Video darüber und "T-Diagramme"
iono

Beantwortet das auch das Henne-Ei-Problem :)
Skynet

@ Skynet selbst gehostetes Huhn
sportzpikachu

65

Aus Java Docs

Der Compiler ist in Java und die Laufzeit in ANSI C geschrieben


1
Der allererste von Sun Microsystems entwickelte Java-Compiler wurde in C unter Verwendung einiger Bibliotheken aus C ++ geschrieben. En.wikipedia.org/wiki/Java_compiler
Rahul Garg

4
Dies ist wirklich eher ein altes Dokument (> 10 Jahre, wie es aussieht). Zum Beispiel heißt es "Java-Bytecodes werden im laufenden Betrieb in native Maschinenanweisungen übersetzt (interpretiert) und nirgendwo gespeichert", was seit etwa 5 Jahren nicht mehr der Fall ist!
oxbow_lakes

2
Nun, seit wann ist die Dokumentation wirklich aktuell, insbesondere nach großen Änderungen? :)
Esko

Nun - die Antwort ist nicht wirklich richtig; Die Sun JVM ist in C und der Sun Java Compiler in Java geschrieben. Die erste IBM JVM wurde in Smalltalk geschrieben.
oxbow_lakes

8
Was kompiliert Java? Java. Wie kommt man an Java? Kompiliere es. Huh?


9

Dieser Link sollte Ihre Frage beantworten

Es scheint, dass der Compiler jetzt in Java geschrieben ist, aber die Laufzeit ist in ANSI C geschrieben



3

Jikes RVM , eine selbsthostende JVM, die häufig für Forschungszwecke verwendet wird, ist in Java geschrieben. Es ist nicht die Person, die auf ihren Desktops läuft, aber es steht ganz oben auf meiner Liste "Jetzt wollen wir die allgemeine Kraft der Sprache demonstrieren".


Es sind Schildkröten ganz unten ? Hat es eine Art Mikrokernel? Wenn ja, in welcher Sprache ist das geschrieben?
Raedwald

3

Angenommen, Sie sprechen von der Hotspot-JVM, die von Sun bereitgestellt wird und in C ++ geschrieben ist. Weitere Informationen zu den verschiedenen virtuellen Maschinen für Java finden Sie unter diesem Link . javac ist wie die meisten Java-Compiler in Java geschrieben.


0
  • Bei der Einführung von Java durch Sun Microsystem wurde der Java-Compiler mit einigen Bibliotheken aus C ++ in C geschrieben.
  • Da es im Compiler-Design ein Konzept namens Bootstapping gibt, wird es hauptsächlich in der Compiler-Entwicklung verwendet. Beim Bootstrapping wird ein Compiler (oder Assembler) in der Quellprogrammiersprache geschrieben, die kompiliert werden soll. Es wird verwendet, um einen selbsthostenden Compiler zu erstellen. Die Entwicklung von Compilern für neue Programmiersprachen wurde zunächst in einer vorhandenen Sprache entwickelt und dann in der neuen Sprache umgeschrieben und selbst kompiliert. Aus diesem Grund ist der Java-Compiler heute in Java selbst geschrieben .
  • Java Virtual Machine: Die Java Virtual Machine ist eine abstrakte Maschine. Wie eine echte Rechenmaschine verfügt sie über einen Befehlssatz und bearbeitet verschiedene Speicherbereiche der Laufzeit. Normalerweise interpretiert JVM den Bytecode in Maschinencode.

(Weitere Informationen finden Sie unter folgendem Link: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.