Java Language
Just in Time (JIT) compilador
Buscar..
Observaciones
Historia
El compilador JIT de Symantec estaba disponible en Sun Java a partir de 1.1.5 en adelante, pero tenía problemas.
El compilador JIT de Hotspot se agregó a Sun Java en 1.2.2 como complemento. En Java 1.3, JIT estaba habilitado por defecto.
(Fuente: ¿ Cuándo Java obtuvo un compilador JIT?
Visión general
El compilador Just-In-Time (JIT) es un componente de Java ™ Runtime Environment que mejora el rendimiento de las aplicaciones Java en tiempo de ejecución.
- Los programas Java se componen de clases, que contienen códigos de byte independientes de la plataforma que pueden ser interpretados por una JVM en diferentes arquitecturas de computadoras.
- En tiempo de ejecución, la JVM carga los archivos de clase, determina la semántica de cada bytecode individual y realiza el cálculo apropiado.
El uso adicional del procesador y la memoria durante la interpretación significa que una aplicación Java funciona más lentamente que una aplicación nativa.
El compilador JIT ayuda a mejorar el rendimiento de los programas Java al compilar códigos de bytes en código de máquina nativo en tiempo de ejecución.
El compilador JIT está habilitado de forma predeterminada y se activa cuando se llama a un método Java. El compilador JIT compila los códigos de bytes de ese método en código de máquina nativo, compilándolos "just in time"
para ejecutarse.
Cuando se ha compilado un método, la JVM llama al código compilado de ese método directamente en lugar de interpretarlo. Teóricamente, si la compilación no requería tiempo de procesador y uso de memoria, compilar todos los métodos podría permitir que la velocidad del programa Java se acerque a la de una aplicación nativa.
La compilación JIT requiere tiempo de procesador y uso de memoria. Cuando se inicia JVM por primera vez, se llaman miles de métodos. La compilación de todos estos métodos puede afectar significativamente el tiempo de inicio, incluso si el programa logra un rendimiento máximo muy bueno.
- En la práctica, los métodos no se compilan la primera vez que se llaman. Para cada método, la JVM mantiene un
call count
que se incrementa cada vez que se llama al método. - La JVM interpreta un método hasta que su recuento de llamadas supera un umbral de compilación JIT.
- Por lo tanto, los métodos de uso frecuente se compilan poco después de que la JVM haya comenzado, y los métodos menos utilizados se compilan mucho más tarde, o no se hacen.
- El umbral de compilación JIT ayuda a que la JVM se inicie rápidamente y aún así tenga un rendimiento mejorado.
- El umbral se ha seleccionado cuidadosamente para obtener un equilibrio óptimo entre los tiempos de inicio y el rendimiento a largo plazo.
- Después de compilar un método, su cuenta de llamadas se restablece a cero y las llamadas subsiguientes al método continúan incrementando su cuenta.
- Cuando el recuento de llamadas de un método alcanza un umbral de recompilación JIT, el compilador JIT lo compila por segunda vez, aplicando una selección más grande de optimizaciones que en la compilación anterior.
- Este proceso se repite hasta que se alcanza el nivel máximo de optimización.
Los métodos más ocupados de un programa Java siempre se optimizan de forma más agresiva, maximizando los beneficios de rendimiento del uso del compilador JIT.
El compilador JIT también puede medir operational data at run time
, y usar esos datos para mejorar la calidad de las recompilaciones adicionales.
El compilador JIT se puede desactivar, en cuyo caso se interpretará todo el programa Java. No se recomienda deshabilitar el compilador JIT, excepto para diagnosticar o solucionar los problemas de compilación JIT.