In quale lingua sono scritti il ​​compilatore Java e JVM?


196

In quali lingue sono scritti il compilatore Java ( javac), la macchina virtuale (JVM) e lo javastarter?


23
lavoro su java, quindi voglio conoscere la lingua ... :)
Rahul Garg,

26
È la tua prospettiva. Diciamo che hai lavorato su una tecnologia per 20 anni e l'intervistatore ti chiede in che lingua è scritta o come funziona, quindi puoi dire che non ti interessa, significa che vuoi solo scrivere se nella lingua non vuoi altro per capire davvero la lingua.
Rahul Garg,

22
e più oltre penso che la conoscenza non sia mai sprecata, quindi sapere qualcosa non è una perdita di tempo.
Rahul Garg,

1
... un ingegnere meccanico o un pilota (per allungare la metafora)
Epaga,

2
@paxdiablo guidare un'auto è qualcosa che fai, ma non la tua professione. Ai conducenti di auto da corsa potrebbe interessare il funzionamento dei motori. Non sto dicendo che tutti se ne fregano .. ma se un pilota automobilistico volesse sapere di più su come il motore ha funzionato sull'auto che è pagato per guidare, penseresti che sia irragionevole?
JD Isaacks,

Risposte:


173

La formulazione precisa della domanda è leggermente fuorviante: non è "la JVM" o "il compilatore" in quanto vi sono più fornitori JVM (jrockit è uno, IBM un altro) e più compilatori là fuori.

  • Sun JVM è scritto C, sebbene ciò non sia necessario: la JVM mentre gira sulla macchina è un eseguibile dipendente dalla piattaforma e quindi avrebbe potuto essere originariamente scritta in qualsiasi lingua. Ad esempio, l'IBM JVM originale è stata scritta in Smalltalk

  • Le librerie Java ( java.lang, java.utilecc., Spesso indicate come API Java ) sono esse stesse scritte in Java, sebbene i metodi contrassegnati come nativesaranno stati scritti in Co C++.

  • Credo che anche il compilatore Java fornito da Sun sia scritto in Java. (Anche se di nuovo, ci sono più compilatori là fuori)


Penso che significhi "java" il programma che usi per avviare una JVM.
Stephen C,

1
In realtà, una libreria in JRE di Sun è scritta in NetRexx. (È una delle librerie matematiche di precisione arbitraria, BigInteger, BigNum o BigDecimal. Ho dimenticato quale.) In teoria, potresti usare qualsiasi linguaggio per implementare il JRE, purché possa essere compilato in una rappresentazione che un programma Java può capire.
Jörg W Mittag,

18
Fornisci un riferimento alla Sun JVM scritta in C.
Mohamed Bana il

8
HotSpot JVM è scritto in C ++ - www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi il link è interrotto e ora risiede a: stroustrup.com/applications.html
flup

81

Il primissimo compilatore Java è stato sviluppato da Sun Microsystems ed è stato scritto in C usando alcune librerie di C ++. Oggi, il compilatore Java è scritto in Java, mentre JRE è scritto in C.

Possiamo immaginare come il compilatore Java sia stato scritto in Java in questo modo:

Il compilatore Java viene scritto come un programma Java e quindi compilato con il compilatore Java scritto in C (il primo compilatore Java). Quindi possiamo usare il compilatore Java appena compilato (scritto in Java) per compilare programmi Java.


32
+1 per spiegare come un compilatore Java può essere scritto in Java :)
Eduard Luca

2
grazie a questo processo di "aggiornamento" a nuovi compilatori compilando il loro codice in compilatori più basilari si chiama "bootstrap", come in "tirarsi su dai bootstrap", da dove proviene "l'avvio" di una macchina. Computerphile su YouTube ha un buon video su questo e "diagrammi a T"
iono

Questo risponde anche al problema di pollo e uova :)
Skynet,

Pollo ospitato da
Skynet

65

Da Java Docs

Il compilatore è scritto in Java e il runtime è scritto in ANSI C.


1
Il primissimo compilatore Java sviluppato da Sun Microsystems è stato scritto in C usando alcune librerie di C ++ en.wikipedia.org/wiki/Java_compiler
Rahul Garg

4
Questo è davvero un vecchio documento (> 10 anni dall'aspetto delle cose). Ad esempio, dice "I bytecode Java sono tradotti al volo in istruzioni native della macchina (interpretate) e non memorizzati da nessuna parte" che non è stato vero per circa 5 anni!
oxbow_lakes,

2
Bene, da quando la documentazione è stata davvero aggiornata, soprattutto dopo grandi cambiamenti? :)
Esko,

Bene - la risposta non è proprio corretta; Sun JVM è scritto in C e il compilatore Sun Java è scritto in Java. Il primo IBM JVM è stato scritto in Smalltalk.
oxbow_lakes,

8
Cosa compila Java? Giava. Bene, come si ottiene Java? Compilalo. Eh?


9

Questo link dovrebbe rispondere alla tua domanda

Sembra che il compilatore sia ora scritto in Java, ma il runtime è scritto in ANSI C


8

In linea di principio quasi tutto, di solito C


3

Jikes RVM , una JVM self-hosting ampiamente utilizzata a fini di ricerca è scritta in Java. Non è quello che le persone corrono sui loro desktop, ma è lassù nella mia lista di "ora mostriamo il potere generale della lingua".


Sono le tartarughe fino in fondo ? Ha una specie di microkernel? In tal caso, in che lingua è scritto?
Raedwald,

3

Supponiamo che tu stia parlando dell'Hotspot JVM, che è fornito da iirc da Sun, è scritto in C ++. Per ulteriori informazioni sulle varie macchine virtuali per Java, è possibile controllare questo collegamento . javac , come la maggior parte dei compilatori Java, è scritto in Java.


0
  • Quando Java è stato introdotto da Sun Microsystem, il compilatore java è stato scritto in C usando alcune librerie di C ++.
  • Poiché esiste un concetto nella progettazione di un compilatore chiamato Bootstapping, utilizzato principalmente nello sviluppo di compilatori, Bootstrapping è il processo di scrittura di un compilatore (o assemblatore) nel linguaggio di programmazione di origine che si intende compilare. Viene utilizzato per produrre un compilatore self-hosting. Lo sviluppo di compilatori per i nuovi linguaggi di programmazione si è sviluppato prima in una lingua esistente, quindi riscritto nella nuova lingua e compilato da solo. Ecco perché oggi il compilatore Java è scritto in Java stesso .
  • Java Virtual Machine: la macchina virtuale Java è una macchina astratta. Come una vera macchina informatica, ha un set di istruzioni e manipola varie aree di memoria del tempo di esecuzione. Di solito JVM interpreta il codice byte in codice macchina.

(Per ulteriori informazioni È possibile controllare questo link: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.