El compilador de Java (javac.exe) toma los archivos de origen Java (.java) como entrada y emite los archivos de código de bytes de Java (.class) (si el código se compila correctamente). A continuación, ejecuta el iniciador Java (java.exe) y lo apunta a su bytecode. Luego, la máquina virtual Java (JVM) tomará su código por el resto del camino y convertirá su código de bytes en código máquina (o nativo).
Puede considerarlo como código de objeto más cercano al código de máquina, y bytecode como más alejado del código de máquina. Además, bytecode es portable (que es una de las grandes ventajas del lenguaje Java), mientras que el código de máquina necesita ser "portado" por medio de un proceso manual (es decir, volver a compilar para una plataforma o arquitectura de destino diferente).
El código de objeto es "casi" código de máquina, está en el medio. Es como una parte del código máquina resultante. Debido a la portabilidad del lenguaje Java, no puede hacer que el compilador traduzca su código fuente directamente al código máquina. Porque el código de máquina debe ser diferente para diferentes plataformas y arquitecturas. Si alguien ejecuta su bytecode en Windows, JVM traducirá su bytecode en un tipo de código de máquina. Si alguien ejecuta su bytecode en un Mac OS X, JVM traducirá su bytecode en un tipo diferente de código de máquina.
Puede pensar en la JVM como un intérprete para su bytecode. Aunque, técnicamente se llama compilación JIT (Just In Time). La JVM es parte de JRE (Java Runtime Environment) y, aunque los programas Java son prácticamente independientes de la plataforma (cualquier sistema que ejecute simultáneamente JVM también puede ejecutar programas Java), la parte JVM de JRE depende de la plataforma.
La versión corta:
- Java compilador produce código de bytes (compilación de la mitad del camino, independiente de la plataforma, no se puede ejecutar sin embargo).
- La máquina virtual Java produce código máquina.
- El código de objeto es una parte del código de máquina resultante.
- Bytecode se convierte en código objeto en el tiempo JIT.
- El código del objeto se convierte en código de máquina (la compilación puede ser de otro modo, depende de la plataforma, puede ejecutarse).
Esto puede no ser preciso al 100% ya que también estoy empezando a aprender estas cosas.Pero esta es mi comprensión de este concepto hasta ahora. Espero que esto ayude.
compilador Java compila el código fuente a código de bytes. Nunca he escuchado sobre el "código objeto" todavía. –
¿un libro de uno de sus profesores? :) ¿Estaba escrito en inglés? – milan