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


Dans le passé, j'ai utilisé 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".

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

Author: displayName, 2009-08-25

9 answers

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

Certaines implémentations de JVM peuvent choisir d'interpréter le bytecode au lieu de le compiler sur machine code et l'exécuter directement. Bien que cela soit toujours considéré comme un "interpréteur", Il est assez 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, le bytecode, sortie du compilateur Java, 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, 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é
  • directement exécuté par un processeur pris en charge (le bytecode est le jeu d'instructions natif de certains PROCESSEURS)
 162
Author: Mehrdad Afshari, 2015-10-23 16:52:26

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

Comme pour les implémentations existantes de Java, la plupart impliquent une étape de compilation en bytecode, elles impliquent donc la compilation. Le runtime peut également charger du bytecode dynamiquement, donc une forme d'interpréteur de bytecode est toujours nécessaire. Cet interpréteur peut ou non à son tour utiliser la compilation en code natif en interne.

Ces jours partiels la compilation juste à temps est utilisée pour de nombreux langages qui étaient autrefois considérés comme "interprétés", par exemple Javascript.

 48
Author: starblue, 2009-08-25 18:46:53

[1]l'Image ci-dessous explique tout...

entrez la description de l'image ici

Le code écrit en Java est:

  • la Première compilation pour bytecode par un programme appelé javac, comme indiqué dans la section gauche de l'image ci-dessus;
  • , Puis, comme illustré dans la partie droite de l'image ci-dessus, [2]un autre programme appelé java commence le Java runtime environnement et il peut compiler et/ou interpréter le bytecode en utilisant l'interpréteur Java/compilateur JIT.

Quand java interpréter le bytecode et quand c'est le cas de le compiler? [3]Le code de l'application est initialement interprété, mais la JVM surveille les séquences de bytecode 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 s'exécuter à grande vitesse, après une phase initiale d'interprétation lente. De plus, comme un programme passe le plus de temps à exécuter une minorité de son code, le temps de compilation réduit est important. 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.


Cliquez sur les numéros en exposant dans la réponse pour les références.

 43
Author: displayName, 2017-02-07 21:37:20

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

 42
Author: Noon Silk, 2009-08-25 04:39:45

Un peu des deux. Tout d'abord java compilé(certains préféreraient dire "traduit") en bytecode, qui a ensuite été compilé ou interprété en fonction de l'humeur de JIT.

 11
Author: maykeye, 2009-08-25 04:40:33

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 octet JVM. Le code octet est ensuite compilé et / ou interprété pour exécuter le programme.

 10
Author: Sam Harwell, 2009-08-25 04:40:22

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 discuté précédemment), que la JVM (Machine virtuelle Java) 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 .classe .

Lorsque le programme est exécuté, , le bytecode est converti le pseudo-code peut être convertis en utilisant le juste-à-temps (JIT) compilateur. Le résultat est du code machine qui est ensuite introduit dans la mémoire et exécuté.

Javac est le Compilateur Java, qui est une compilation du 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é de l'interprétation.

Un langue interprétée 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.

A 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ù aucun pré-exécution la traduction a lieu)

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

 1
Author: prime, 2018-04-05 03:40:52

Java est un langage compilé en octets ciblant une plate-forme appeléeJava Virtual Machine qui est basée sur une pile et a des implémentations très rapides sur de nombreuses plates-formes.

 -1
Author: hobbs, 2009-08-25 04:40:32

Citation de: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster

Les développeurs d'applications peuvent développer le code d'application sur l'un des différents systèmes d'exploitation disponibles sur le marché aujourd'hui. Le langage Java est agnostique à ce stade au système d'exploitation. Le code source brillant écrit par le développeur d'applications Java est maintenant compilé en code Octet Java qui, dans la terminologie Java, est appelé compilation côté client. Cette compilation à Le code octet Java est ce qui permet aux développeurs Java d’ "écrire une fois". Le code d'octet Java peut s'exécuter sur n'importe quel système d'exploitation et serveur compatibles, rendant ainsi le code source agnostique du système d'exploitation/serveur. Après la création de code d'octet Java, l'interaction entre l'application Java et le système d'exploitation/serveur sous-jacent est plus intime. Le parcours continue - Le cadre d'applications d'entreprise exécute ces codes d'octets Java dans un environnement d'exécution connu sous le nom de Machine virtuelle Java (JVM) ou d'environnement d'exécution Java (JRE). Le JVM a des liens étroits avec le système d'exploitation et le matériel sous-jacents car il exploite les ressources offertes par le système d'exploitation et le serveur. Le code d'octet Java est maintenant compilé en un code exécutable en langage machine spécifique à la plate-forme. Ceci est appelé compilation côté serveur.

Je dirais donc que Java est définitivement un langage compilé.

 -2
Author: Teo, 2016-04-03 13:21:25