¿En qué idioma están escritos el compilador de Java y JVM?


195

¿En qué idiomas están escritos el compilador Java ( javac), la máquina virtual (JVM) y el javainiciador?


23
Yo trabajo en Java, por lo que quiero saber sobre la lengua ... :)
Rahul Garg

25
Es su perspectiva. Digamos que trabajó en alguna tecnología durante 20 años y el entrevistador le pregunta qué idioma está escrito o cómo funciona, entonces puede decir que no le importa, significa que solo quiere escribir si no quiere en el idioma para entender realmente el idioma
Rahul Garg el

21
y más, creo que el conocimiento nunca se desperdicia, así que saber algo no es una pérdida de tiempo.
Rahul Garg el

1
... un ingeniero mecánico o un piloto de carreras (para estirar la metáfora)
Epaga

2
@paxdiablo conducir un automóvil es algo que haces, pero no es tu profesión. A los conductores de autos de carrera les puede importar cómo funcionan los motores. No digo que a todos les importe ... pero si un conductor de autos de carrera quisiera saber más sobre cómo funciona el motor en el auto que le pagan por conducir, ¿pensaría que eso no es razonable?
JD Isaacks

Respuestas:


171

La formulación precisa de la pregunta es ligeramente engañosa: no es "la JVM" o "el compilador", ya que hay múltiples proveedores de JVM (jrockit es uno, IBM otro) y múltiples compiladores .

  • El Sun JVM está escrito C, aunque este no tiene por qué ser el caso: el JVM que se ejecuta en su máquina es un ejecutable dependiente de la plataforma y, por lo tanto, podría haberse escrito originalmente en cualquier idioma. Por ejemplo, el IBM JVM original fue escrito en Smalltalk

  • Las bibliotecas de Java ( java.lang, java.utiletc., a menudo denominadas API de Java ) están escritas en Java, aunque los métodos marcados como nativese han escrito en Co C++.

  • Creo que el compilador de Java proporcionado por Sun también está escrito en Java. (Aunque de nuevo, hay múltiples compiladores por ahí)


Creo que quiere decir "Java" el programa que utiliza para iniciar una JVM.
Stephen C

1
En realidad, una biblioteca en Sun's JRE está escrita en NetRexx. (Es una de las bibliotecas matemáticas de precisión arbitraria, ya sea BigInteger, BigNum o BigDecimal. Olvidé cuál.) En teoría, podría usar cualquier lenguaje para implementar el JRE, siempre que pueda compilarse en una representación que un programa Java puede entender.
Jörg W Mittag el

18
Proporcione una referencia a la JVM de Sun escrita en C.
Mohamed Bana

8
El HotSpot JVM está escrito en C ++ - www2.research.att.com/~bs/applications.html
devdimi

55
@devdimi el enlace está roto y ahora reside en: stroustrup.com/applications.html
flup

80

El primer compilador de Java fue desarrollado por Sun Microsystems y fue escrito en C usando algunas bibliotecas de C ++. Hoy, el compilador de Java está escrito en Java, mientras que el JRE está escrito en C.

Podemos imaginar cómo se escribió el compilador de Java en Java de esta manera:

El compilador de Java se escribe como un programa de Java y luego se compila con el compilador de Java escrito en C (el primer compilador de Java). Por lo tanto, podemos usar el compilador Java recién compilado (escrito en Java) para compilar programas Java.


31
+1 para explicar cómo se puede escribir un compilador de Java en Java :)
Eduard Luca

2
Para este proceso de "actualizar" a nuevos compiladores compilando su código en compiladores más básicos se llama "bootstrapping", como "arrancarse con sus bootstraps", que es de donde proviene el "arranque" de una máquina. Computerphile en YouTube tiene un buen video sobre esto y "diagramas T"
iono

¿Eso también responde al problema del huevo y la gallina :)
Skynet

@Skynet pollo alojado en sí mismo
sportzpikachu

65

De Java Docs

El compilador está escrito en Java y el tiempo de ejecución está escrito en ANSI C


1
El primer compilador de Java desarrollado por Sun Microsystems fue escrito en C usando algunas bibliotecas de C ++ en.wikipedia.org/wiki/Java_compiler
Rahul Garg

44
Este es realmente un documento antiguo (> 10 años, según parece). Por ejemplo, dice "los códigos de bytes de Java se traducen sobre la marcha a las instrucciones de la máquina nativa (interpretadas) y no se almacenan en ningún lugar", ¡lo cual no ha sido cierto durante aproximadamente 5 años!
oxbow_lakes

2
Bueno, ¿desde cuándo la documentación ha estado realmente actualizada, especialmente después de grandes cambios? :)
Esko

Bueno, la respuesta no es realmente correcta; Sun JVM está escrito en C y el compilador Java de Sun está escrito en Java. El primer IBM JVM fue escrito en Smalltalk.
oxbow_lakes

8
¿Qué compila Java? Java. Bueno, ¿cómo se obtiene Java? Compilarlo ¿Eh?


9

Este enlace debería responder a tu pregunta

Parece que el compilador ahora está escrito en Java, pero el tiempo de ejecución está escrito en ANSI C


8

En principio casi cualquier cosa, generalmente C


3

Jikes RVM , un JVM de alojamiento propio que se utiliza ampliamente para fines de investigación, está escrito en Java. No es el que las personas ejecutan en sus escritorios, pero está muy arriba en mi lista de "ahora vamos a mostrar el poder general del lenguaje".


¿Son tortugas hasta el fondo ? ¿Tiene algún tipo de microkernel? Si es así, ¿en qué idioma está escrito eso?
Raedwald

3

Supongamos que está hablando del Hotspot JVM, que es iirc proporcionado por Sun, está escrito en C ++. Para obtener más información sobre las diversas máquinas virtuales para Java, puede consultar este enlace . javac , como la mayoría de los compiladores de Java, está escrito en Java.


0
  • Cuando Sun Microsystem introdujo Java, el compilador de Java se escribió en C utilizando algunas bibliotecas de C ++.
  • Como hay un concepto en el diseño del compilador llamado Bootstapping, principalmente se usa en el desarrollo del compilador, Bootstrapping es el proceso de escribir un compilador (o ensamblador) en el lenguaje de programación de origen que se pretende compilar. Se utiliza para producir un compilador de alojamiento propio. El desarrollo de compiladores para nuevos lenguajes de programación se desarrolló primero en un idioma existente y luego se reescribió en el nuevo lenguaje y se compiló por sí mismo. Es por eso que hoy, el compilador de Java está escrito en Java .
  • Máquina virtual Java: la máquina virtual Java es una máquina abstracta. Al igual que una máquina de computación real, tiene un conjunto de instrucciones y manipula varias áreas de memoria del tiempo de ejecución. Por lo general, JVM interpreta el código de bytes en código de máquina.

(Para obtener más información, puede consultar este enlace: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.