Dans quelle langue le compilateur Java et la JVM sont-ils écrits?


195

Dans quelles langues le compilateur Java ( javac), la machine virtuelle (JVM) et le javadémarreur sont-ils écrits?


23
je travaille sur java donc je veux savoir la langue ... :)
Rahul Garg

26
C'est votre point de vue. Disons que vous avez travaillé sur une technologie pendant 20 ans et l'intervieweur vous demande quelle langue elle est écrite ou comment cela fonctionne, alors vous pouvez dire que vous ne vous souciez pas, cela signifie que vous voulez simplement écrire si une autre langue ne veut pas pour vraiment comprendre la langue.
Rahul Garg

22
et plus encore je pense que la connaissance n'est jamais gaspillée. Donc, savoir quelque chose n'est pas une perte de temps.
Rahul Garg

1
... un ingénieur en mécanique ou un pilote de course (pour étirer la métaphore)
Epaga

2
@paxdiablo conduire une voiture est quelque chose que vous faites, mais pas votre profession. Les conducteurs de voitures de course peuvent se soucier du fonctionnement des moteurs. Je ne dis pas qu'ils se soucient tous .. mais si un conducteur de voiture de course voulait en savoir plus sur le fonctionnement du moteur sur la voiture qu'il est rémunéré pour conduire, pensez-vous que c'est déraisonnable?
JD Isaacks

Réponses:


171

La formulation précise de la question est légèrement trompeuse: ce n'est pas "la JVM" ou "le compilateur" car il existe plusieurs fournisseurs JVM (jrockit est l'un, IBM un autre) et plusieurs compilateurs .

  • La JVM Sun est écrite C, bien que cela ne soit pas nécessairement le cas - la JVM telle qu'elle s'exécute sur votre machine est un exécutable dépendant de la plate-forme et aurait donc pu être écrit à l'origine dans n'importe quelle langue. Par exemple, l'IBM JVM d'origine a été écrite en Smalltalk

  • Les bibliothèques Java ( java.lang, java.utiletc., souvent appelées API Java ) sont elles-mêmes écrites en Java, bien que les méthodes marquées comme nativeaient été écrites en Cou C++.

  • Je crois que le compilateur Java fourni par Sun est également écrit en Java. (Bien que là encore, il existe plusieurs compilateurs)


Je pense qu'il signifie "java" le programme que vous utilisez pour démarrer une JVM.
Stephen C

1
En fait, une bibliothèque du JRE de Sun est écrite dans NetRexx. (C'est l'une des bibliothèques mathématiques de précision arbitraire, soit BigInteger, BigNum ou BigDecimal. J'ai oublié lequel.) En théorie, vous pouvez utiliser n'importe quel langage pour implémenter le JRE, tant qu'il peut compiler en une représentation qu'un programme Java peut comprendre.
Jörg W Mittag

18
Veuillez fournir une référence à la JVM Sun écrite en C.
Mohamed Bana

8
La machine virtuelle
Java

5
@devdimi le lien est rompu et réside maintenant à: stroustrup.com/applications.html
flup

80

Le tout premier compilateur Java a été développé par Sun Microsystems et a été écrit en C à l'aide de certaines bibliothèques de C ++. Aujourd'hui, le compilateur Java est écrit en Java, tandis que le JRE est écrit en C.

Nous pouvons imaginer comment le compilateur Java a été écrit en Java comme ceci:

Le compilateur Java est écrit en tant que programme Java puis compilé avec le compilateur Java écrit en C (le premier compilateur Java). Ainsi, nous pouvons utiliser le compilateur Java nouvellement compilé (écrit en Java) pour compiler des programmes Java.


31
+1 pour expliquer comment un compilateur Java peut être écrit en Java :)
Eduard Luca

2
fyi ce processus de "mise à niveau" vers de nouveaux compilateurs en compilant leur code dans des compilateurs plus basiques s'appelle "bootstrapping", comme dans "se tirer vers le haut par vos bootstraps", d'où vient le "boot" d'une machine. Computerphile sur YouTube a une bonne vidéo à ce sujet et "diagrammes en T"
iono

Est-ce que cela répond également au problème du poulet et des œufs :)
Skynet

@Skynet poulet auto-hébergé
sportzpikachu

65

Depuis Java Docs

Le compilateur est écrit en Java et le runtime est écrit en ANSI C


1
Le tout premier compilateur Java développé par Sun Microsystems a été écrit en C à l'aide de quelques bibliothèques de C ++ en.wikipedia.org/wiki/Java_compiler
Rahul Garg

4
C'est vraiment un document plutôt ancien (> 10 ans à première vue). Par exemple, il indique que "les bytecodes Java sont traduits à la volée en instructions machine natives (interprétées) et ne sont stockés nulle part", ce qui n'est plus le cas depuis environ 5 ans!
oxbow_lakes

2
Eh bien, depuis quand la documentation est-elle vraiment à jour, surtout après de gros changements? :)
Esko

Eh bien - la réponse n'est pas vraiment correcte; la Sun JVM est écrite en C et le compilateur Sun java est écrit en Java. La première IBM JVM a été écrite en Smalltalk.
oxbow_lakes

8
Qu'est-ce qui compile Java? Java. Eh bien, comment obtenez-vous Java? Compilez-le. Hein?


9

Ce lien devrait répondre à votre question

Il semble que le compilateur soit maintenant écrit en Java, mais le runtime est écrit en ANSI C


8

En principe, presque tout, généralement C


3

Jikes RVM , une machine virtuelle Java auto-hébergée largement utilisée à des fins de recherche est écrite en Java. Ce n'est pas celui que les gens exécutent sur leur bureau, mais c'est bien là-haut sur ma liste de "maintenant, montrons la puissance générale de la langue".


C'est des tortues tout le long ? At-il une sorte de micro-noyau? Si oui, dans quelle langue est-ce écrit?
Raedwald

3

Supposons que vous parliez de la JVM Hotspot, qui est fournie par Sun par iirc, elle est écrite en C ++. Pour plus d'informations sur les différentes machines virtuelles pour Java, vous pouvez consulter ce lien . javac , comme la plupart des compilateurs Java, est écrit en Java.


0
  • Lorsque Java est introduit par Sun Microsystem, le compilateur java a été écrit en C en utilisant certaines bibliothèques de C ++.
  • Comme il existe un concept dans la conception du compilateur appelé Bootstapping, il est principalement utilisé dans le développement du compilateur, le Bootstrapping est le processus d'écriture d'un compilateur (ou assembleur) dans le langage de programmation source qu'il est destiné à compiler. Il est utilisé pour produire un compilateur auto-hébergé. Le développement de compilateurs pour de nouveaux langages de programmation a d'abord été développé dans une langue existante, puis réécrit dans le nouveau langage et compilé par lui-même. C'est pourquoi aujourd'hui, le compilateur Java est écrit en Java lui-même .
  • Machine virtuelle Java : la machine virtuelle Java est une machine abstraite. Comme une vraie machine informatique, il possède un jeu d'instructions et manipule diverses zones de mémoire de l'exécution. Habituellement, la JVM interprète le code d'octet en code machine.

(Pour plus d'informations, vous pouvez consulter ce lien: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.