una programacion lenguaje interpretado escribe compilado como clase java compilation interpretation

programacion - ¿Java es un lenguaje de programación compilado o interpretado?



lenguaje de programacion interpretado (9)

Cita de: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster

Los desarrolladores de aplicaciones pueden desarrollar el código de la aplicación en cualquiera de los diversos sistemas operativos disponibles actualmente en el mercado. El lenguaje Java es agnóstico en esta etapa para el sistema operativo. El brillante código fuente escrito por el desarrollador de la aplicación Java ahora se compila en el código Java Byte, que en la terminología de Java se conoce como compilación del lado del cliente. Esta compilación al código de Java Byte es lo que permite a los desarrolladores de Java ''escribir una vez''. El código de Java Byte se puede ejecutar en cualquier sistema operativo y servidor compatible, lo que hace que el código fuente sea independiente de OS / Server. Después de la creación del código de Java Byte, la interacción entre la aplicación Java y el sistema operativo subyacente es más íntima. El viaje continúa: el marco de aplicaciones empresariales ejecuta estos códigos de Java Byte en un entorno de tiempo de ejecución que se conoce como Máquina virtual Java (JVM) o Entorno de ejecución de Java (JRE). La JVM tiene vínculos estrechos con el sistema operativo subyacente y el hardware porque aprovecha los recursos ofrecidos por el sistema operativo y el servidor. El código de Java Byte ahora se compila en un código ejecutable de lenguaje de máquina que es específico de la plataforma. Esto se conoce como compilación del lado del servidor.

Entonces, yo diría que Java es definitivamente un lenguaje compilado.

En el pasado, he usado C ++ como lenguaje de programación. Sé que el código escrito en C ++ pasa por un proceso de compilación hasta que se convierte en código objeto "código máquina".

Me gustaría saber cómo funciona Java en ese sentido. ¿Cómo se escribe el código Java escrito por el usuario?


Java es un lenguaje compilado en bytes que se dirige a una plataforma llamada Java Virtual Machine que se basa en la pila y tiene algunas implementaciones muy rápidas en muchas plataformas.


Java es un lenguaje de programación compilado, pero en lugar de compilar directamente en código máquina ejecutable, se compila en una forma binaria intermedia llamada código de bytes JVM. El código de bytes luego se compila y / o interpreta para ejecutar el programa.


Java hace compilación e interpretación,

En Java, los programas no se compilan en archivos ejecutables ; se compilan en bytecode (como se discutió anteriormente), que la JVM (Java Virtual Machine) luego interpreta / ejecuta en tiempo de ejecución. El código fuente de Java se compila en bytecode cuando usamos el compilador javac. El bytecode se guarda en el disco con la extensión de archivo .class .

Cuando se va a ejecutar el programa, el bytecode se convierte, el bytecode se puede convertir, utilizando el compilador just-in-time (JIT). El resultado es un código de máquina que luego se alimenta a la memoria y se ejecuta.

Javac es el compilador de Java que compila el código de Java en Bytecode. JVM es una máquina virtual Java que ejecuta / interpreta / traduce el código de bytes en código de máquina nativo. En Java, aunque se considera como un lenguaje interpretado, puede usar la compilación JIT (Just-In-Time) cuando el bytecode está en la JVM. El compilador JIT lee los códigos de bytes en muchas secciones (o en su totalidad, rara vez) y los compila dinámicamente en código de máquina para que el programa pueda ejecutarse más rápido, y luego almacenarlos en caché y reutilizarlos más tarde sin necesidad de volver a compilarlos. Así que la compilación de JIT combina la velocidad del código compilado con la flexibilidad de la interpretación.

Un lenguaje interpretado es un tipo de lenguaje de programación para el cual la mayoría de sus implementaciones ejecutan instrucciones directa y libremente, sin compilar previamente un programa en instrucciones de lenguaje de máquina. El intérprete ejecuta el programa directamente, traduciendo cada enunciado en una secuencia de una o más subrutinas ya compiladas en código máquina.

Un lenguaje compilado es un lenguaje de programación cuyas implementaciones son típicamente compiladores (traductores que generan código máquina a partir del código fuente), y no intérpretes (ejecutores paso a paso del código fuente, donde no tiene lugar la traducción previa al tiempo de ejecución)

En las implementaciones de lenguaje de programación moderno como en Java, cada vez es más popular que una plataforma brinde ambas opciones.


Java se compila en bytecode, que luego va a Java VM, que lo interpreta.


Las implementaciones de Java generalmente usan un proceso de compilación en dos pasos. El compilador de Java compila el código fuente de Java a bytecode . El bytecode es ejecutado por una Máquina Virtual Java (JVM). Las JVM modernas usan una técnica llamada compilación Just-In-Time (JIT) para compilar el bytecode en instrucciones nativas entendidas por hardware CPU sobre la marcha en tiempo de ejecución.

Algunas implementaciones de JVM pueden optar por interpretar el bytecode en lugar de JIT compilarlo en código máquina, y ejecutarlo directamente. Aunque esto todavía se considera un "intérprete", es bastante diferente de los intérpretes que leen y ejecutan el código fuente de alto nivel (es decir, en este caso, el código fuente de Java no se interpreta directamente, el bytecode, el resultado del compilador de Java).

Es técnicamente posible compilar Java hasta el código nativo antes de tiempo y ejecutar el binario resultante. También es posible interpretar el código de Java directamente.

Para resumir, dependiendo del entorno de ejecución, bytecode puede ser:

  • compilado antes de tiempo y ejecutado como código nativo (similar a la mayoría de los compiladores de C ++)
  • compilado justo a tiempo y ejecutado
  • interpretado
  • directamente ejecutado por un procesador compatible (bytecode es el conjunto de instrucciones nativas de algunas CPU)

Los términos "lenguaje interpretado" o "lenguaje compilado" no tienen sentido, porque cualquier lenguaje de programación puede ser interpretado y / o compilado.

En cuanto a las implementaciones existentes de Java, la mayoría implica un paso de compilación a bytecode, por lo que implican compilación. El tiempo de ejecución también puede cargar bytecode dinámicamente, por lo que siempre se necesita alguna forma de intérprete de bytecode. Ese intérprete puede o no utilizar internamente la compilación del código nativo.

En estos días, la compilación parcial just-in-time se utiliza para muchos idiomas que alguna vez se consideraron "interpretados", por ejemplo, Javascript.


Tipo de ambos. En primer lugar compila Java (algunos preferirían decir "traducido") a bytecode, que luego compila o interpreta según el estado de ánimo de JIT.


[ 1 ] La imagen a continuación lo explica todo ...

El código escrito en Java es:

  • Primero compilado a bytecode por un programa llamado javac como se muestra en la sección izquierda de la imagen de arriba;
  • Luego, como se muestra en la sección derecha de la imagen anterior, [ 2 ] otro programa llamado java inicia el entorno de tiempo de ejecución de Java y puede compilar y / o interpretar el bytecode utilizando el intérprete Java / JIT Compiler.

¿Cuándo interpreta java el bytecode y cuándo lo compila? [ 3 ] El código de la aplicación se interpreta inicialmente, pero la JVM supervisa qué secuencias de bytecode se ejecutan con frecuencia y las traduce a código de máquina para su ejecución directa en el hardware. Para bytecode que se ejecuta solo unas pocas veces, esto ahorra tiempo de compilación y reduce la latencia inicial; para bytecode ejecutado con frecuencia, la compilación JIT se utiliza para ejecutar a alta velocidad, después de una fase inicial de interpretación lenta. Además, dado que un programa pasa la mayor parte del tiempo ejecutando una minoría de su código, el tiempo de compilación reducido es significativo. Finalmente, durante la interpretación inicial del código, las estadísticas de ejecución se pueden recopilar antes de la compilación, lo que ayuda a realizar una mejor optimización.

Haga clic en los números superimpuestos en la respuesta para referencias.