Java esegue sia la compilazione che l'interpretazione,
In Java, i programmi non vengono compilati in file eseguibili ; sono compilati in bytecode (come discusso in precedenza), che la JVM (Java Virtual Machine) interpreta / esegue in fase di esecuzione. Il codice sorgente Java viene compilato in bytecode quando utilizziamo il compilatore javac. Il bytecode viene salvato sul disco con l'estensione .class .
Quando il programma deve essere eseguito, il bytecode viene convertito, il bytecode può essere convertito, usando il compilatore just-in-time (JIT). Il risultato è il codice macchina che viene quindi immesso nella memoria e viene eseguito.
Javac è il compilatore Java che compila il codice Java in Bytecode. JVM è una macchina virtuale Java che esegue / interpreta / traduce il bytecode in codice nativo della macchina. In Java sebbene sia considerato come un linguaggio interpretato, può usare la compilazione JIT (Just-in-Time) quando il bytecode è nella JVM. Il compilatore JIT legge i bytecode in molte sezioni (o completamente, raramente) e li compila dinamicamente in codice macchina in modo che il programma possa essere eseguito più velocemente, quindi memorizzato nella cache e riutilizzato in seguito senza dover essere ricompilato. Quindi la compilazione JIT combina la velocità del codice compilato con la flessibilità dell'interpretazione.
Un linguaggio interpretato è un tipo di linguaggio di programmazione per il quale la maggior parte delle sue implementazioni esegue istruzioni direttamente e liberamente, senza aver precedentemente compilato un programma in istruzioni in linguaggio macchina. L'interprete esegue direttamente il programma, traducendo ogni istruzione in una sequenza di una o più subroutine già compilate nel codice macchina.
Un linguaggio compilato è un linguaggio di programmazione le cui implementazioni sono in genere compilatori (traduttori che generano codice macchina dal codice sorgente) e non interpreti (esecutori passo-passo del codice sorgente, in cui non avviene alcuna traduzione pre-runtime)
Nelle moderne implementazioni del linguaggio di programmazione come in Java, è sempre più popolare per una piattaforma fornire entrambe le opzioni.