2010-07-05 28 views

Respuesta

39

Java se compila en un "código de bytes" intermedio en el momento de la compilación. Esto está en contraste con un lenguaje como C que se compila en lenguaje de máquina en tiempo de compilación. El código de bytes de Java no se puede ejecutar directamente en el hardware de la forma en que puede compilarse el código C. En cambio, el código de bytes debe ser interpretado por la JVM (Java Virtual Machine) en tiempo de ejecución para poder ser ejecutado. El inconveniente principal de un lenguaje como C es que cuando se compila, ese archivo binario solo funcionará en una arquitectura en particular (por ejemplo, x86).

Los idiomas interpretados como PHP son efectivamente independientes del sistema y se basan en un intérprete específico de sistema y arquitectura. Esto lleva a una portabilidad mucho mayor (los mismos scripts PHP funcionan en máquinas con Windows y máquinas Linux, etc.). Sin embargo, esta interpretación conduce a una disminución significativa del rendimiento. Los lenguajes de alto nivel como PHP requieren más tiempo para interpretar que las instrucciones específicas de la máquina que el hardware puede ejecutar.

Java busca encontrar un compromiso entre un lenguaje puramente compilado (sin portabilidad) y un lenguaje puramente interpretado (que es significativamente más lento). Lo logra compilando el código en una forma más cercana al lenguaje de la máquina (en realidad, el código de bytes de Java es un lenguaje de máquina, simplemente para la Máquina Virtual de Java), pero aún se puede transportar fácilmente entre arquitecturas. Debido a que Java aún requiere una capa de software para su ejecución (la JVM), es un lenguaje interpretado. Sin embargo, el intérprete (la JVM) opera en una forma intermedia conocida como código de bytes en lugar de en los archivos fuente brutos. Este código de bytes se genera en tiempo de compilación por el compilador de Java. Por lo tanto, Java también es un lenguaje compilado. Al operar de esta manera, Java obtiene algunos de los beneficios de los lenguajes compilados, al tiempo que obtiene algunos de los beneficios de los lenguajes interpretados. Sin embargo, también hereda algunas limitaciones de ambos idiomas.

Como señala Bozho, existen algunas estrategias para aumentar el rendimiento del código Java (y otros lenguajes de código de bytes como .Net) a través del uso de la compilación Just in Time (JIT). El proceso real varía de implementación a implementación según los requisitos, pero el resultado final es que el código original se compila en código de bytes en tiempo de compilación, pero luego se ejecuta a través de un compilador en tiempo de ejecución antes de que se ejecute. Al hacer esto, el código se puede ejecutar a velocidades casi nativas. Algunas plataformas (creo que .Net lo hace) guardan el resultado de la compilación JIT, reemplazando el código de bytes. Al hacer esto, todas las ejecuciones futuras del programa se ejecutarán como si el programa se compilara originalmente desde el principio.

+0

"Los lenguajes interpretados como PHP son completamente independientes del sistema" - no del todo cierto: ['pow (2,36) '] (http://www.php.net/manual/en/function.pow.php) dará' 6.87194767360e + 10' en un sistema de 32 bits y '68719476736' en un sistema de 64 bits. – amphetamachine

+0

Un nitpick menor - pero el código de bytes es el lenguaje de la máquina. No hay nada que le impida tener una máquina física que implemente las especificaciones de JVM.En ese caso, el código de bytes se ejecutará directamente en el hardware y no habría necesidad de una capa de software o interpretación. – emory

+1

@amphetamachine Bastante, ¿qué tal "efectivamente"? –

6

Este es un tema extenso y será mejor que lea sobre JIT. En resumen, Java se compila en bytecode, y el bytecode se compila más tarde (en la JVM) a código de máquina.

+0

¿Qué es JIT en simple? – JavaUser

+4

@JavaUser Tarda unos 10 minutos en leer esto lentamente ... – ant

1

Compilado: Su programa es sintácticamente un programa correcto de Java, antes de que comience el programa.

Interpretado: Ejecute en diferentes plataformas el mismo código (byte).

Compilado: Cuando su programa se ha compilado correctamente, puede tener el 80% de los errores de software bajo control. Y su código no se detendrá porque no ha cerrado correctamente un bloque de código, etc.

Interpretado: ¿Sabe qué son los Applets? Fue la aplicación "asesina" cuando salió Java. Su navegador descarga el applet desde el sitio web y ejecuta el código del applet en su navegador. Eso no es muy bueno. Pero el mismo applet se ejecuta en Windows, Linux, Macs, Solaris, ... porque ejecuta/interpreta un lenguaje de intermedios: el código de bytes.

+2

la respuesta es muy abstracta. Puede por favor elobrate – JavaUser

2

Java está compilado, en código de bytes no binarios. Los códigos de byte no son ejecutables directamente, necesitan que la Máquina Virtual Java haga una compilación justo a tiempo y los vuelva a compilar en código de máquina en tiempo de ejecución.

En un nivel muy básico, separa el código que los programadores escriben desde la máquina local donde opera la JVM, de ahí una mejor portabilidad. Al compilar en bytecode, ayuda a compilar justo a tiempo, reducir el tamaño de los archivos y, más o menos, ayudar a ocultar el código real. (también elimina algún error de tiempo de compilación)

2

Java se considera un lenguaje "compilado" porque el código es compilado en formato de código de bytes que luego ejecuta la Máquina virtual Java (JVM). Esto ofrece varias ventajas en el ámbito del rendimiento y la optimización del código, sin mencionar garantizar la corrección del código.

Se considera un lenguaje "interpretado" porque, después de compilar el bytecode, se puede ejecutar en cualquier máquina que tenga una JVM instalada. Es de esta manera que Java se parece mucho a un lenguaje interpretado ya que, en su mayor parte, no depende de la plataforma en la que se está ejecutando. Este comportamiento es similar a otros lenguajes interpretados como Perl, Python, PHP, etc.

Una desventaja teórica al hecho de que los programas Java se pueden ejecutar en cualquier sistema en ausencia del código fuente es eso, mientras que este método de distribución garantiza la compatibilidad multiplataforma, los desarrolladores tienen una razón menos para lanzar su código fuente, lo que genera una brecha entre los significados ideológicos de las frases "multiplataforma" y "código abierto".

11

Por qué decimos que Java es un lenguaje compilado e interpretado.

Debido a que el código fuente (.java archivos) es compilado en bytecode (.class archivos) que es entonces interpretarse por un Java Virtual Machine (también conocida como una JVM) para su ejecución (la JVM puede hacer una mayor optimización, pero esto es una historia diferente).

¿Cuál es la ventaja sobre esto (siendo compilado/interpretado)

portabilidad. El mismo bytecode se puede ejecutar en cualquier plataforma siempre que esté instalada una JVM ("compilar una vez, ejecutar en cualquier lugar").

1

Java es un lenguaje de programación orientado a objetos completamente desarrollado. Es plataforma independiente y normalmente se interpreta en lugar de compilarse como C/C++. Java usa un bytecode independiente que es neutral en arquitectura. Es decir, está diseñado para ser independiente de la máquina. Los códigos de bytes son interpretados y ejecutados por una Máquina Virtual Java (JVM).