¿Qué hace un comstackdor Just-In-Time (JIT)?

¿Qué hace un comstackdor JIT específicamente en comparación con un comstackdor que no es JIT? ¿Alguien puede dar una descripción sucinta y fácil de entender?

Un comstackdor JIT se ejecuta después de que el progtwig ha comenzado y comstack el código (generalmente bytecode o algún tipo de instrucciones de VM) sobre la marcha (o justo a tiempo, como se llama) en una forma que suele ser más rápida, normalmente el nativo de la CPU del host conjunto de instrucciones. Un JIT tiene acceso a información de tiempo de ejecución dinámica, mientras que un comstackdor estándar no lo hace y puede hacer mejores optimizaciones, como funciones de alineación que se utilizan con frecuencia.

Esto contrasta con un comstackdor tradicional que comstack todo el código en el lenguaje de máquina antes de ejecutar el progtwig por primera vez.

Parafraseando, los comstackdores convencionales construyen todo el progtwig como un archivo EXE ANTES de la primera vez que lo ejecutas. Para los progtwigs de estilo más nuevos, se genera un ensamblaje con pseudocódigo (código p). Solo DESPUÉS de ejecutar el progtwig en el sistema operativo (por ejemplo, haciendo doble clic en su icono), el comstackdor (JIT) iniciará y generará un código de máquina (m-code) que el procesador basado en Intel o lo que sea, entenderá.

Al principio, un comstackdor era responsable de convertir un lenguaje de alto nivel (definido como nivel superior al ensamblador) en código objeto (instrucciones de la máquina), que luego se vincularía (mediante un enlazador) a un ejecutable.

En un punto de la evolución de los lenguajes, los comstackdores comstackrían un lenguaje de alto nivel en pseudocódigo, que luego sería interpretado (por un intérprete) para ejecutar su progtwig. Esto eliminó el código objeto y los ejecutables, y permitió que estos idiomas fueran portátiles para múltiples sistemas operativos y plataformas de hardware. Pascal (que compiló a P-Code) fue uno de los primeros; Java y C # son ejemplos más recientes. Eventualmente, el término P-Code fue reemplazado por bytecode, ya que la mayoría de las pseudooperaciones son de un byte de longitud.

Un comstackdor Just-In-Time (JIT) es una característica del intérprete en tiempo de ejecución, que en lugar de interpretar bytecode cada vez que se invoca un método, comstackrá el bytecode en las instrucciones del código máquina de la máquina en ejecución y luego invocará código objeto en su lugar. Idealmente, la eficiencia del código de objeto en ejecución superará la ineficacia de recomstackr el progtwig cada vez que se ejecuta.

JIT: Justo a tiempo, la palabra misma dice cuándo es necesaria (a pedido)

Escenario típico:

El código fuente se convierte completamente en código de máquina

Escenario JIT:

El código fuente se convertirá en lenguaje ensamblador como estructura [para ex IL (lenguaje intermedio) para C #, ByteCode para java].

El código intermedio se convierte en lenguaje de máquina solo cuando la aplicación necesita que los códigos necesarios solo se conviertan en código de máquina.

Comparación JIT vs Non-JIT:

  • En JIT no todo el código se convierte en código de máquina primero una parte del código que se necesita se convertirá en código de máquina, entonces si un método o funcionalidad llamada no está en la máquina, entonces se convertirá en código de máquina … se reduce carga en la CPU.

  • Como el código máquina se generará en tiempo de ejecución … el comstackdor JIT producirá un código de máquina que está optimizado para ejecutar la architecture de la CPU de la máquina.

Ejemplos de JIT:

  1. En Java JIT está en JVM (Java Virtual Machine)
  2. En C # está en CLR (Common Language Runtime)
  3. En Android está en DVM (Máquina virtual Dalvik) o ART (Android RunTime) en versiones más nuevas.

Como otros han mencionado

JIT significa Just-in-Time, lo que significa que el código se comstack cuando es necesario, no antes del tiempo de ejecución.

Para agregar un punto a la discusión anterior, JVM mantiene un recuento de la cantidad de tiempo que se ejecuta una función. Si este recuento excede un límite predefinido, JIT comstack el código en lenguaje de máquina que el procesador puede ejecutar directamente (a diferencia del caso normal en el que javac comstack el código en bytecode y luego java – el intérprete interpreta este bytecode línea por línea lo convierte en código de máquina y se ejecuta).

También la próxima vez que se calcula esta función, el mismo código comstackdo se ejecuta nuevamente a diferencia de la interpretación normal en la que el código se interpreta de nuevo línea por línea. Esto hace que la ejecución sea más rápida.

JIT significa Just-in-Time, lo que significa que el código se comstack cuando es necesario, no antes del tiempo de ejecución.

Esto es beneficioso porque el comstackdor puede generar código que está optimizado para su máquina en particular. Un comstackdor estático, como el comstackdor de C promedio, comstackrá todo el código en el código ejecutable en la máquina del desarrollador. Por lo tanto, el comstackdor realizará optimizaciones basadas en algunas suposiciones. Se puede comstackr más lentamente y hacer más optimizaciones porque no está frenando la ejecución del progtwig para el usuario.

Después de que el código de bytes (que es architecture neutral) ha sido generado por el comstackdor de Java, la ejecución será manejada por la JVM (en Java). El cargador cargará el código de bytes en JVM y luego se interpretarán las instrucciones de cada byte.

Cuando necesitamos llamar a un método varias veces, necesitamos interpretar el mismo código muchas veces y esto puede llevar más tiempo de lo necesario. Entonces tenemos los comstackdores JIT (just-in-time). Cuando el byte ha sido cargado en JVM (su tiempo de ejecución), todo el código será comstackdo en lugar de interpretado, ahorrándose tiempo.

Los comstackdores JIT solo funcionan durante el tiempo de ejecución, por lo que no tenemos ningún resultado binario.

El comstackdor JIT solo comstack el código de bytes a código nativo equivalente en la primera ejecución. En cada ejecución sucesiva, la JVM simplemente utiliza el código nativo ya comstackdo para optimizar el rendimiento.

enter image description here

Sin el comstackdor JIT, el intérprete de JVM traduce el código de bytes línea por línea para que parezca que se está ejecutando una aplicación nativa.

enter image description here

Fuente

Comstackdor Just In Time (JIT):
Comstack los bytecodes java en las instrucciones de la máquina de esa CPU específica.

Por ejemplo, si tenemos una statement de bucle en nuestro código java:

while(i<10){ // ... a=a+i; // ... } 

El código de bucle anterior se ejecuta 10 veces si el valor de i es 0.

No es necesario comstackr el bytecode por 10 veces una y otra vez, ya que la misma instrucción se ejecutará 10 veces. En ese caso, es necesario comstackr ese código solo una vez y el valor puede cambiarse para el número de veces requerido. Entonces, el comstackdor Just In Time (JIT) realiza un seguimiento de dichos enunciados y métodos (como se dijo anteriormente) y comstack tales pedazos de código de bytes en código máquina para un mejor rendimiento.

Otro ejemplo similar es la búsqueda de un patrón que usa "Expresión regular" en una lista de cadenas / oraciones.

El comstackdor JIT no comstack todo el código en el código máquina. Comstack código que tiene un patrón similar en tiempo de ejecución.

Consulte esta documentación de Oracle en Understand JIT para leer más.

Tiene un código que está incluido en algún IL (lenguaje intermedio). Cuando ejecuta su progtwig, la computadora no entiende este código. Solo entiende el código nativo. Entonces, el comstackdor JIT comstack su IL en código nativo sobre la marcha. Lo hace a nivel de método.

Sé que este es un hilo viejo, pero la optimización del tiempo de ejecución es otra parte importante de la comstackción de JIT que no parece discutirse aquí. Básicamente, el comstackdor JIT puede monitorear el progtwig mientras se ejecuta para determinar formas de mejorar la ejecución. Luego, puede realizar esos cambios sobre la marcha, durante el tiempo de ejecución. Optimización JIT de Google (javaworld tiene un artículo bastante bueno al respecto ) .

Jit significa justo a tiempo compiler jit es un progtwig que convierte el código de bytes de Java en instrucciones que pueden enviarse directamente al procesador.

Usando el comstackdor Java in time (realmente un segundo comstackdor) en la plataforma del sistema en particular, cumple el bytecode en un código de sistema particular, una vez que el código ha sido comstackdo por el comstackdor de jit, generalmente se ejecutará más rápidamente en la computadora.

El comstackdor just-in-time viene con la máquina virtual y se usa opcionalmente. Comstack el bytecode en el código ejecutable específico de la plataforma que se ejecuta inmediatamente.

Un comstackdor que no es JIT toma el código fuente y lo transforma en código de bytes específico de la máquina en el momento de la comstackción. Un comstackdor JIT toma el código de byte agnóstico de la máquina que se generó en tiempo de comstackción y lo transforma en código de bytes específico de la máquina en tiempo de ejecución. El comstackdor JIT que usa Java es lo que permite que un solo binario se ejecute en una multitud de plataformas sin modificaciones.

Los siguientes ejemplos de código muestran cómo el JIT optimiza el código de Java.

Código antes de la optimización

  class A { B b; public void newMethod() { y = b.get(); ...do stuff... z = b.get(); sum = y + z; } } class B { int value; final int get() { return value; } } 

Código después de la optimización

 class A { B b; public void newMethod() { y = b.value; ...do stuff... sum = y + y; } } class B { int value; final int get() { return value; } } 

Originalmente, el código contenía dos llamadas al método b.get (). Después de la optimización, las dos llamadas al método se optimizan en una única operación de copia variable; es decir, el código optimizado no necesita realizar una llamada a método para adquirir el valor de campo de la clase B.

La comstackción just-in-time (JIT), (también traducción dinámica o comstackción en tiempo de ejecución ), es una forma de ejecutar código de computadora que involucra la comstackción durante la ejecución de un progtwig, en tiempo de ejecución, en lugar de antes de la ejecución .

La comstackción de TI es una combinación de los dos enfoques tradicionales de traducción a código máquina: comstackción anticipada (AOT) e interpretación , y combina algunas ventajas e inconvenientes de ambos. La comstackción JIT combina la velocidad del código comstackdo con la flexibilidad de la interpretación .

Consideremos JIT usado en JVM,

Por ejemplo, los comstackdores HotSpot JVM JIT generan optimizaciones dinámicas. En otras palabras, toman decisiones de optimización mientras la aplicación Java se está ejecutando y generan instrucciones nativas de alto rendimiento dirigidas a la architecture subyacente del sistema.

Cuando se elige un método para la comstackción, la JVM alimenta su bytecode al comstackdor Just-In-Time (JIT). El JIT necesita comprender la semántica y la syntax del bytecode antes de poder comstackr el método correctamente. Para ayudar al comstackdor JIT a analizar el método, primero se reformula su bytecode en una representación interna llamada trace arboles, que se asemeja más al código de máquina que al bytecode. Luego, se realizan análisis y optimizaciones en los árboles del método. Al final, los árboles se traducen al código nativo.

Un árbol de rastreo es una estructura de datos que se utiliza en la comstackción en tiempo de ejecución del código de progtwigción. Los árboles trazadores se utilizan en un tipo de comstackdor ‘justo a tiempo’ que rastrea el código que se ejecuta durante las zonas activas y lo comstack. Referir esto .

Referir:

El 20% del código de bytes se usa el 80% del tiempo. El comstackdor JIT obtiene estas estadísticas y optimiza este 20% del código de bytes para que se ejecute más rápido agregando métodos en línea, eliminación de lockings no utilizados, etc. y también creando el bytecode específico para esa máquina. Cito de este artículo, encontré que fue útil. http://java.dzone.com/articles/just-time-compiler-jit-hotspot

JIT se refiere al motor de ejecución en algunas implementaciones de JVM, una que es más rápida pero que requiere más memoria, es un comstackdor just-in-time. En este esquema, los códigos de byte de un método se comstackn en código máquina nativo la primera vez que se invoca el método. El código máquina nativo para el método se almacena en caché, por lo que puede volver a utilizarse la próxima vez que se invoque el mismo método.

JVM en realidad realiza pasos de comstackción durante el tiempo de ejecución por razones de rendimiento. Esto significa que Java no tiene una separación limpia de ejecución de comstackción. Primero hace una llamada comstackción estática del código fuente de Java a bytecode. Luego este bytecode se pasa a la JVM para su ejecución. Pero la ejecución de bytecode es lenta, por lo que la JVM mide con qué frecuencia se ejecuta el bytecode y cuando detecta un “punto de acceso” de código que se ejecuta con mucha frecuencia, realiza una comstackción dinámica de bytecode a machinecode del código de “zona activa” (hotspot profiler). De manera efectiva, hoy los progtwigs de Java se ejecutan mediante la ejecución de código máquina.