¿Es la JVM un comstackdor o un intérprete?

Tengo una pregunta muy básica sobre JVM: ¿es un comstackdor o un intérprete?

Si es un intérprete, ¿qué pasa con el comstackdor JIT que existe dentro de la JVM?
Si ninguno, ¿qué es exactamente la JVM? (No quiero la definición básica de jVM de convertir código de bytes a código específico de máquina, etc.)

Primero, tengamos una idea clara de los siguientes términos

Javac es Java Compiler: comstack tu código Java en Bytecode

JVM es una máquina virtual Java: ejecuta / interpreta / traduce código de bytes en código de máquina nativo

JIT es comstackdor Just In Time: comstack la secuencia de instrucciones del bytecode dado para el código de la máquina en el tiempo de ejecución antes de ejecutarla de forma nativa. Su objective principal es hacer grandes optimizaciones en el rendimiento.

Así que ahora, busquemos respuestas a sus preguntas …

1) JVM: is it a compiler or an interpreter?Respuesta: intérprete

2) what about JIT compiler that exist inside the JVM?Resp .: si lees esta respuesta completamente, probablemente ya lo sepas

3) what exactly is the JVM?Ans:

  • JVM es una plataforma virtual que reside en su RAM
  • Su componente, cargador de clase carga el archivo .class en la RAM
  • El componente Verificador de código de byte en JVM comprueba si hay alguna violación de restricción de acceso en su código. (Esta es una de las principales razones por las cuales java es seguro)
  • A continuación, el componente del motor de ejecución convierte el código de bytes en código de máquina ejecutable

Espero que esto te haya ayudado …

Es un poco de ambos, pero ninguno en el sentido tradicional.

Las JVM modernas toman código de bytes y lo comstackn en código nativo cuando lo necesitan por primera vez. “JIT” en este contexto significa “justo a tiempo”. Actúa como un intérprete desde el exterior, pero realmente detrás de escena se está comstackndo en código máquina.

La JVM no se debe confundir con el comstackdor de Java, que comstack el código fuente en bytecode. Por lo tanto, no es útil considerarlo como “un comstackdor”, sino más bien para saber que en el fondo hace una comstackción.

Son ambos. Comienza interpretando bytecode y puede (en caso de que decida que vale la pena) luego comstackr ese bytecode en código máquina nativo.

Son ambos. Puede interpretar bytecode y comstackrlo en código nativo.

Como @delnan ya mencionó en la sección de comentarios, no es ninguno de los dos .

JVM es una máquina abstracta que ejecuta bytecode de Java .

JVM tiene varias implementaciones:

  • HotSpot (intérprete + comstackdor JIT )
  • Dalvik (intérprete + comstackdor JIT)
  • ART (comstackdor AOT + comstackdor JIT)
  • GCJ (comstackdor AOT)
  • JamVM (intérprete)

… y muchos otros .

La mayoría de las otras respuestas cuando se habla de JVM se refieren a HotSpot o a alguna combinación de los enfoques anteriores para implementar JVM.

Como otros han dicho, ¡son ambos! Si desea referirlo con todo lujo de detalles, puede ver: Esta Descripción de IBM

JVM tiene comstackdor e intérprete. Porque el comstackdor comstack el código y genera bytecode. Después de eso, el intérprete convierte el bytecode en un código comprensible por la máquina.

Ejemplo: escribir y comstackr un progtwig y se ejecuta en Windows. Lleve el archivo .class a otro SO (Unix) y se ejecutará debido a un intérprete que convierte el bytecode en un código comprensible para la máquina.