Ok, he leído varias discusiones sobre las diferencias entre JIT y los intérpretes habilitados para JIT, y por qué JIT generalmente aumenta el rendimiento.Do Not JIT y non-JIT habilitado Intérpretes Ultimately Produce Machine Code
Sin embargo, mi pregunta es:
En última instancia, no un no-JIT habilitado intérprete tiene que convertir el código de bytes (línea por línea) en código máquina/nativo para ser ejecutado, al igual que un compilador JIT hará ? He visto publicaciones y libros de texto que dicen que sí y publicaciones que dicen que no. El último argumento es que el intérprete/JVM ejecuta este bytecode directamente sin interacción con el código máquina/nativo.
Si intérpretes no JIT hacen girar cada línea en código máquina, parece que los principales beneficios de JIT son ...
La inteligencia de almacenamiento en caché o bien todos (JIT normal) o encuentra con frecuencia (zona activa/optimización adaptativa) partes del bytecode para que el paso de compilación de código de máquina no sea necesario cada vez.
Cualquier optimización que los compiladores JIT puedan realizar al traducir bytecode en código de máquina.
¿Es eso exacto? Parece que hay poca diferencia (aparte de una posible optimización, o bloques JITting vs línea por línea) entre la traducción de bytecode a código máquina a través de intérpretes que no son JIT ni JIT.
Gracias de antemano.
¡Gracias por la respuesta! Estaba leyendo el libro "Comenzando con juegos y gráficos en C++", y menciona "El intérprete traduce cada instrucción de alto nivel en su instrucción de lenguaje máquina equivalente y la ejecuta de inmediato". Ahí es donde comenzó la confusión. Sin embargo, estaba hablando de intérpretes en general. –
Un intérprete "traduce" comandos de alto nivel al lenguaje de la máquina cambiando/saltando a una sección de lenguaje de máquina que implementa la operación representada por el comando de alto nivel. –