Java hace tanto compilación como 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) 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 y 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 Bytecode en código de máquina nativo. En Java, aunque se considera un lenguaje interpretado, puede usar la compilación JIT (Just-in-Time) cuando el código de bytes 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 se almacena en caché y se reutiliza más tarde sin necesidad de volver a compilar. Entonces, la compilación JIT combina la velocidad del código compilado con la flexibilidad de 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 máquina. El intérprete ejecuta el programa directamente, traduciendo cada declaración 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 suelen ser compiladores (traductores que generan código de máquina a partir del código fuente) y no intérpretes (ejecutores paso a paso del código fuente, donde no se lleva a cabo una traducción previa al tiempo de ejecución)
En implementaciones modernas de lenguaje de programación como en Java, cada vez es más popular que una plataforma brinde ambas opciones.