web-dev-qa-db-fra.com

Est-ce que Java est 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 un code objet "code machine".

Je voudrais savoir comment Java fonctionne à cet égard. Comment l'utilisateur est-il écrit Java exécuté par l'ordinateur?)?

138
Eduardo

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

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

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

Pour résumer, en fonction de 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é
  • exécuté directement par un processeur pris en charge (le bytecode est le jeu d'instructions natif de certaines CPU)
192
Mehrdad Afshari

enter image description here

Le code écrit en Java est:

  • D'abord compilé en bytecode par un programme appelé javac comme indiqué dans la section de gauche de l'image ci-dessus;
  • Ensuite, comme indiqué dans la partie droite de l’image ci-dessus, un autre programme appelé Java lance l’environnement d’exécution Java) et il peut compiler et/ou interpréter le bytecode en utilisant le Java interpréteur/compilateur JIT).

Quand Java interprète-t-il le code et quand le compile-t-il?? Le code de l'application est initialement interprété, mais la machine virtuelle surveille les séquences de bytecode fréquemment exécutées et les convertit en code machine pour une exécution directe sur le matériel. utilisé pour fonctionner à grande vitesse, après une phase initiale d’interprétation lente. De plus, étant donné qu’un programme passe le plus de temps à exécuter une minorité de son code, le temps de compilation réduit est significatif. Enfin, lors de l’interprétation initiale du code, des statistiques d’exécution peuvent être collectées avant la compilation, ce qui permet de réaliser une meilleure optimisation.


Références:

1: http://techwelkin.com/compiler-vs-interpreter

2: http://docs.Oracle.com/javase/7/docs/technotes/tools/windows/Java.html

3: https://en.wikipedia.org/wiki/Just-in-time_compilation#Startup_delay_and_optimizations

70
displayName

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

En ce qui concerne les implémentations existantes de Java, la plupart impliquent une étape de compilation en bytecode, elles impliquent donc une compilation. Le moteur d'exécution peut également charger le bytecode de manière dynamique. Un interpréteur de bytecode est donc toujours nécessaire. À son tour, cet interprète peut utiliser la compilation en code natif en interne.

Ces jours-ci, la compilation partielle juste à temps est utilisée pour de nombreuses langues autrefois considérées comme "interprétées", par exemple le Javascript.

55
starblue

Java est compilé en bytecode, qui passe ensuite dans la Java VM, qui l’interprète).

50
Noon Silk

Un peu des deux. Tout d’abord Java compilé (certains préfèrent dire "traduit")) en bytecode, qui est ensuite compilé ou interprété en fonction de l’ambiance de JIT.

11
maykeye

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

10
Sam Harwell

Java fait à la fois la compilation et l'interprétation,

En Java, les programmes ne sont pas compilés en fichiers exécutables ; ils sont compilés en bytecode (comme indiqué précédemment), que la JVM (machine virtuelle Java) interprète/exécute ensuite à l'exécution. 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 may ê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 Java code en Bytecode. JVM est Java machine virtuelle qui exécute/interprète/traduit le code binaire en code de machine native. Dans Java bien qu'il soit considéré comme un interprété, il peut utiliser la compilation JIT (Just-in-Time) lorsque le bytecode est dans la machine virtuelle Java. Le compilateur JIT lit les bytecodes dans de nombreuses sections (ou en totalité, rarement) et les compile de manière dynamique dans le code machine exécuté plus rapidement, puis mis en cache et réutilisé plus tard sans avoir besoin d'être recompilé, la compilation JIT associe la vitesse du code compilé à la souplesse de l'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 compilation préalable. programme en instructions en langage machine. L'interprète 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.

A compiled language is a programming language whose implementations are typically compilers (translators that generate machine code from source code), and not interpreters (step-by-step executors of source code, where no pre-runtime translation takes place)

Dans les implémentations de langages de programmation modernes comme Java, il est de plus en plus courant pour une plate-forme de fournir les deux options.

3
prime