2012-01-19 14 views
5

Tengo entendido que el compilador de Java produce "código de byte", no "código de objeto". Antes que nada, ¿es correcto?¿Java produce código de objeto o código de bytes?

Además, eso es justo lo que dice mi libro, me preguntaba por qué es correcto. ¿Cuál es la diferencia entre el código de bytes y el código objeto?

+5

compilador Java compila el código fuente a código de bytes. Nunca he escuchado sobre el "código objeto" todavía. –

+1

¿un libro de uno de sus profesores? :) ¿Estaba escrito en inglés? – milan

Respuesta

15

El código de byte es solo el "código objeto" para la máquina virtual Java. No es código nativo (por ejemplo, x86). Para ser honesto, rara vez escucho el término "código objeto" en estos días; generalmente es más claro hablar en términos más específicos.

+0

¿Entonces el código objeto es código nativo? – Bhaxy

+5

@Bhaxy: No, yo no dije eso. [Wikipedia] (http://en.wikipedia.org/wiki/Object_code) lo describe como "lo que produce un compilador de computadora". Es un término un tanto vago, pero yo diría que generalmente es "una representación no textual de un programa, dirigido a las máquinas en lugar de a los humanos". La "máquina" tiene es la JVM en lugar de la arquitectura nativa de la computadora en la que se está ejecutando. –

+0

@Bhaxy, sí lo tienes :) – reversiblean

2

Cuando compila un programa Java, va a byte-code. Cuando ejecuta el artefacto resultante, la JVM de la plataforma ejecuta (bueno, interpreta) el bytecode, convirtiéndolo en instrucciones a nivel de máquina.

0

Java es independiente de la plataforma. Cuando compila el código fuente de Java, se convierte en código de bytes y, cuando se ejecuta la aplicación, JRE en el equipo cliente ejecuta el código de bytes.

0

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.

1

El código del objeto C está en un formato que solo el sistema operativo en el que se compiló puede interpretar.

código C - (. Por ejemplo gcc)> compilador de C -> código objeto -> salidas de compilación OS

El C del código objeto para el sistema operativo que fue escrito para. Si desea que su código C se ejecute en otra máquina, debe volver a compilarlo.
El código C compilado en Windows no se ejecutará en Linux sin volver a compilar.

Java código-> Java compilador (javac) -> código de bytes -> JVM

El compilador de Java pone a cabo código de bytes que se ejecuta en la JVM. Todas las idiosincrasias del sistema operativo se insertan en la JVM, oculta del código de Java. Por lo tanto, siempre que su sistema operativo tenga una JVM, puede ejecutar bytecode de Java sin recompilar. El código de Java compilado en Windows se puede ejecutar en cualquier otro sistema operativo con la misma versión de JVM.

también se refieren difference between object code and byte code

Cuestiones relacionadas