¿Java es un lenguaje de progtwigción comstackdo o interpretado?

En el pasado, he usado C ++ como lenguaje de progtwigción. Sé que el código escrito en C ++ pasa por un proceso de comstackció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?

Las implementaciones de Java generalmente usan un proceso de comstackción en dos pasos. El comstackdor de Java comstack 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 comstackción Just-In-Time (JIT) para comstackr 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 comstackrlo 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 comstackdor de Java).

Es técnicamente posible comstackr 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:

  • comstackdo antes de tiempo y ejecutado como código nativo (similar a la mayoría de los comstackdores de C ++)
  • comstackdo 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 comstackdo” no tienen sentido, porque cualquier lenguaje de progtwigción puede ser interpretado y / o comstackdo.

En cuanto a las implementaciones existentes de Java, la mayoría implica un paso de comstackción a bytecode, por lo que implican comstackció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 comstackción del código nativo.

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

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

enter image description here

El código escrito en Java es:

  • Primero comstackdo a bytecode por un progtwig 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 progtwig llamado java inicia el entorno de tiempo de ejecución de Java y puede comstackr y / o interpretar el bytecode utilizando el intérprete Java / JIT Compiler.

¿Cuándo interpreta java el bytecode y cuándo lo comstack? [ 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 comstackción y reduce la latencia inicial; para bytecode ejecutado con frecuencia, la comstackción JIT se utiliza para ejecutar a alta velocidad, después de una fase inicial de interpretación lenta. Además, dado que un progtwig pasa la mayor parte del tiempo ejecutando una minoría de su código, el tiempo de comstackción reducido es significativo. Finalmente, durante la interpretación inicial del código, las estadísticas de ejecución se pueden recostackr antes de la comstackción, lo que ayuda a realizar una mejor optimización.


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

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

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

Java es un lenguaje de progtwigción comstackdo, pero en lugar de comstackr directamente en código máquina ejecutable, se comstack en una forma binaria intermedia llamada código de bytes JVM. El código de bytes luego se comstack y / o interpreta para ejecutar el progtwig.

Java hace comstackción e interpretación,

En Java, los progtwigs no se comstackn en archivos ejecutables ; se comstackn 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 comstack en bytecode cuando usamos el comstackdor javac. El bytecode se guarda en el disco con la extensión de archivo .class .

Cuando se va a ejecutar el progtwig, el bytecode se convierte, el bytecode se puede convertir, utilizando el comstackdor 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 comstackdor de Java que comstack 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 comstackción JIT (Just-In-Time) cuando el bytecode está en la JVM. El comstackdor JIT lee los códigos de bytes en muchas secciones (o en su totalidad, rara vez) y los comstack dinámicamente en código de máquina para que el progtwig pueda ejecutarse más rápido, y luego almacenarlos en caché y reutilizarlos más tarde sin necesidad de volver a comstackrlos. Así que la comstackción de JIT combina la velocidad del código comstackdo con la flexibilidad de la interpretación.

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

Un lenguaje comstackdo es un lenguaje de progtwigción cuyas implementaciones son típicamente comstackdores (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 progtwigción moderno como en Java, cada vez es más popular que una plataforma brinde ambas opciones.

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

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 shiny código fuente escrito por el desarrollador de la aplicación Java ahora se comstack en el código Java Byte, que en la terminología de Java se conoce como comstackción del lado del cliente. Esta comstackció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 comstack en un código ejecutable de lenguaje de máquina que es específico de la plataforma. Esto se conoce como comstackción del lado del servidor.

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