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 un code objet "code machine".
J'aimerais savoir comment Java fonctionne à cet égard. Comment l'utilisateur écrit-il le code Java exécuté par l'ordinateur?
java
compilation
interpretation
Afficher un nom
la source
la source
Réponses:
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 Just-in-Time (JIT) pour compiler le bytecode en instructions natives comprises par le processeur matériel à la volée au moment de l'exécution.
Certaines implémentations de JVM peuvent choisir d'interpréter le bytecode au lieu de le compiler JIT en code machine et de l'exécuter directement. Bien que cela soit toujours considéré comme un «interpréteur», il est assez différent des interpréteurs qui lisent et exécutent le code source de haut niveau (c'est-à-dire dans ce cas, le code source Java n'est pas interprété directement, le bytecode, la 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, le bytecode peut être:
la source
Le code écrit en Java est:
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 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 économise le temps de compilation et réduit 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 significatif. Enfin, lors de l'interprétation initiale du code, les statistiques d'exécution peuvent être collectées avant la compilation, ce qui permet une meilleure optimisation.
la source
Les termes «langage interprété» ou «langage compilé» n'ont aucun sens, car n'importe quel langage de programmation peut être interprété et / ou compilé.
Quant aux implémentations existantes de Java, la plupart impliquent une étape de compilation en bytecode , donc elles impliquent une compilation. Le runtime peut également charger dynamiquement le bytecode, donc une forme d'interpréteur de bytecode est toujours nécessaire. Cet interpréteur peut ou non utiliser à son tour 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.
la source
Java est compilé en bytecode, qui entre ensuite dans la machine virtuelle Java, qui l'interprète.
la source
Java est un langage de programmation compilé, mais plutôt que de compiler directement en code machine exécutable, il se compile en 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.
la source
Un peu des deux. Tout d'abord java compilé (certains préféreraient dire «traduit») en bytecode, qui ensuite soit compilé, soit interprété selon l'humeur de JIT.
la source
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.
la source
Java est un langage compilé par octets ciblant une plate-forme appelée Java Virtual Machine qui est basée sur la pile et a des implémentations très rapides sur de nombreuses plates-formes.
la source
Citation de: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster
Je dirais donc que Java est définitivement un langage compilé.
la source