Java fait à la fois la compilation et l'interprétation,
En Java, les programmes ne sont pas compilés dans des fichiers exécutables ; ils sont compilés en bytecode (comme indiqué précédemment), que la JVM (Java Virtual Machine) interprète / exécute ensuite à l'exécution. Le code source Java est compilé en bytecode lorsque nous utilisons le compilateur javac. Le bytecode est enregistré sur le disque avec l'extension de fichier .class .
Lorsque le programme doit être exécuté, le bytecode est converti, le bytecode peut être converti à l'aide du compilateur juste à temps (JIT). Le résultat est un code machine qui est ensuite introduit dans la mémoire et exécuté.
Javac est le compilateur Java qui compile le code Java en Bytecode. JVM est une machine virtuelle Java qui exécute / interprète / traduit le Bytecode en code machine natif. En Java, bien qu'il soit considéré comme un langage interprété, il peut utiliser la compilation JIT (Just-in-Time) lorsque le bytecode est dans la JVM. Le compilateur JIT lit les bytecodes dans de nombreuses sections (ou dans leur intégralité, rarement) et les compile dynamiquement en code machine afin que le programme puisse s'exécuter plus rapidement, puis mis en cache et réutilisé plus tard sans avoir besoin d'être recompilé. Ainsi, la compilation JIT combine la vitesse du code compilé avec la flexibilité d'interprétation.
Un langage interprété est un type de langage de programmation pour lequel la plupart de ses implémentations exécutent des instructions directement et librement, sans compiler au préalable un programme en instructions en langage machine. L'interpréteur exécute le programme directement, traduisant chaque instruction en une séquence d'un ou plusieurs sous-programmes déjà compilés en code machine.
Un langage compilé est un langage de programmation dont les implémentations sont généralement des compilateurs (traducteurs qui génèrent du code machine à partir du code source), et non des interprètes (exécuteurs pas à pas du code source, où aucune traduction avant l'exécution n'a lieu)
Dans les implémentations de langage de programmation modernes comme en Java, il est de plus en plus populaire pour une plate-forme de fournir les deux options.