226 votes

Java est-il un langage de programmation compilé ou interprété ?

Dans le passé, j'ai utilisé le C++ comme langage de programmation. Je sais que le code écrit en C++ passe par un processus de compilation jusqu'à ce qu'il devienne du code objet "code machine".

J'aimerais savoir comment Java fonctionne à cet égard. Comment le code Java écrit par l'utilisateur est-il exécuté par l'ordinateur ?

277voto

Mehrdad Afshari Points 204872

Les implémentations Java utilisent généralement un processus de compilation en deux étapes. Le code source Java est compilé en bytecode par le compilateur Java. Le bytecode est exécuté par une machine virtuelle Java (JVM). Les JVM modernes utilisent une technique appelée Compilation juste-à-temps (JIT) pour compiler le bytecode en instructions natives comprises par le CPU matériel à la volée au moment de l'exécution.

Certaines implémentations de la JVM peuvent choisir d'interpréter le bytecode au lieu de le compiler en JIT en code machine et de l'exécuter directement. Bien que cela soit toujours considéré comme un "interprète", c'est très différent des interprètes qui lisent et exécutent le code source de haut niveau (c'est-à-dire que dans ce cas, le code source Java n'est pas interprété directement, c'est le bytecode, sortie du compilateur Java, qui l'est).

Il est techniquement possible de compiler Java en code natif à l'avance et d'exécuter le binaire résultant. Il est également possible d'interpréter directement le code Java.

Pour résumer, selon l'environnement d'exécution, le bytecode peut être :

  • compilé à l'avance et exécuté en tant que code natif (similaire à la plupart des compilateurs C++)
  • compilé juste à temps et exécuté
  • interprétées
  • directement exécuté par un processeur supporté (le bytecode est le jeu d'instructions natif de certains processeurs)

126voto

displayName Points 1447

enter image description here

Le code écrit en Java l'est :

  • Première compilation en bytecode par un programme appelé javac comme indiqué dans la partie gauche de l'image ci-dessus ;
  • Ensuite, comme le montre la section droite de l'image ci-dessus, un autre programme appelé java démarre l'environnement d'exécution Java et il peut compiler et/ou interpréter le bytecode en utilisant le compilateur Java Interpreter/JIT.

Quand Java interprète-t-il le bytecode et quand le compile-t-il ? Le code de l'application est initialement interprété, mais la JVM surveille les séquences de bytecode qui sont fréquemment exécutées et les traduit en code machine pour une exécution directe sur le matériel. Pour le bytecode qui n'est exécuté que quelques fois, cela permet d'économiser le temps de compilation et de réduire la latence initiale ; pour le bytecode fréquemment exécuté, la compilation JIT est utilisée pour fonctionner à grande vitesse, après une phase initiale d'interprétation lente. De plus, étant donné qu'un programme passe la plupart du temps à exécuter une minorité de son code, la réduction du temps de compilation est significative. Enfin, lors de l'interprétation initiale du code, des statistiques d'exécution peuvent être collectées avant la compilation, ce qui permet d'effectuer une meilleure optimisation.

75voto

starblue Points 29696

Les termes "langage interprété" ou "langage compilé" n'ont pas de sens, car tout langage de programmation peut être interprété et/ou compilé.

En ce qui concerne les implémentations existantes de Java, la plupart impliquent une étape de compilation pour bytecode Ils impliquent donc une compilation. Le moteur d'exécution peut également charger le bytecode de manière dynamique, de sorte qu'une certaine forme d'interpréteur de bytecode est toujours nécessaire. Cet interpréteur peut, à son tour, utiliser ou non la compilation en code natif en interne.

De nos jours, la compilation partielle juste-à-temps est utilisée pour de nombreux langages qui étaient autrefois considérés comme "interprétés", par exemple JavaScript.

56voto

Noon Silk Points 30396

Java est compilé en bytecode, qui va ensuite dans la machine virtuelle Java, qui l'interprète.

19voto

280Z28 Points 49515

Java est un langage de programmation compilé, mais plutôt que de compiler directement en code machine exécutable, il compile sous une forme binaire intermédiaire appelée code d'octet JVM. Le code octet est ensuite compilé et/ou interprété pour exécuter le programme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X