Java faz compilação e interpretação,
Em Java, os programas não são compilados em arquivos executáveis ; eles são compilados no bytecode (como discutido anteriormente), que a JVM (Java Virtual Machine) interpreta / executa em tempo de execução. O código-fonte Java é compilado no bytecode quando usamos o compilador javac. O bytecode é salvo no disco com a extensão de arquivo .class .
Quando o programa deve ser executado, o bytecode é convertido, o bytecode pode ser convertido, usando o compilador just-in-time (JIT). O resultado é um código de máquina que é então alimentado na memória e executado.
Javac é o compilador Java que compila o código Java no Bytecode. A JVM é uma Java Virtual Machine que executa / interpreta / converte o Bytecode em código de máquina nativo. Em Java, embora seja considerada uma linguagem interpretada, ela pode usar a compilação JIT (Just-in-Time) quando o bytecode estiver na JVM. O compilador JIT lê os bytecodes em muitas seções (ou na íntegra, raramente) e os compila dinamicamente no código da máquina, para que o programa possa executar mais rapidamente e, depois, armazenado em cache e reutilizado posteriormente sem precisar ser recompilado. Portanto, a compilação JIT combina a velocidade do código compilado com a flexibilidade da interpretação.
Uma linguagem interpretada é um tipo de linguagem de programação para a qual a maioria de suas implementações executa instruções direta e livremente, sem antes compilar um programa em instruções de linguagem de máquina. O intérprete executa o programa diretamente, traduzindo cada instrução em uma sequência de uma ou mais sub-rotinas já compiladas em código de máquina.
Uma linguagem compilada é uma linguagem de programação cujas implementações são tipicamente compiladores (tradutores que geram código de máquina a partir do código-fonte) e não intérpretes (executores passo a passo do código-fonte, onde não ocorre tradução pré-tempo de execução)
Nas implementações modernas da linguagem de programação, como em Java, é cada vez mais popular uma plataforma fornecer as duas opções.