web-dev-qa-db-fra.com

Quelle est l'utilisation de la machine virtuelle Java si JIT est en train de convertir le code intermédiaire en instructions machine

J'ai vraiment du mal à comprendre la chose suivante

Auparavant je sais:

Lorsqu'un programme Java est compilé, le fichier .class sera généré. Dans ce code est sous la forme d'octets. Ensuite, la JVM traduira ce code octet en un format compréhensible par la machine.

Maintenant, je vois dans une des questions dans SO

Un compilateur Just-In-Time (JIT) est une fonctionnalité de l'interpréteur run-time Qui, au lieu d'interpréter le bytecode chaque fois qu'une méthode Est appelée, compilera le bytecode dans le code machine instructions de la machine en marche

Donc, ici, JIT convertit le bytecode en instructions machine. Alors à quoi sert la JVM? Nous pouvons le faire avec JIT. A ma connaissance, JIT est uniquement destiné à améliorer les performances de la JVM.

27
Anusha

Le JIT est juste une partie de la JVM. D'autres parties incluent l'interpréteur de bytecode, la vérification du chargement de la classe et les mécanismes de liaison, ainsi que la prise en charge du code natif pour des éléments tels que la réflexion, les E/S, etc.

En ce sens, le JIT ne permet pas à la machine virtuelle d’exécuter plus rapidement. Au lieu de cela, (code Java) s'exécute plus rapidement ... que si la machine virtuelle Java l'interprétait. 

En réalité, la JVM fait commence par interpréter les codes octets. Après un certain temps, la machine virtuelle Java utilise ensuite son compilateur JIT pour compiler les méthodes fortement utilisées en code natif, en utilisant les statistiques collectées lors de l'interprétation pour ajuster le code au problème en question.

À propos, cette partie du texte que vous avez citée est maladroite et techniquement inexacte:

Un compilateur Just-In-Time (JIT) est une fonctionnalité de l'interpréteur au moment de l'exécution ... (context)

En fait, le JIT n'est pas une caractéristique de l'interprète. Le JIT est plutôt une fonctionnalité de la machine virtuelle qui fonctionne à côté l'interpréteur. 

29
Stephen C

Pour être clair :

JVM exécute tout comme: 

Il reste au-dessus du système d'exploitation et fournit une abstraction Entre le programme Java compilé et le système d'exploitation. De cette façon, le programme compilé Java N’a plus à s’inquiéter de la plate-forme sur laquelle il doit Fonctionner. Le programme Java compile le code en bytecodes que JVM peut Comprendre et exécuter.

JIT

Lorsque la machine virtuelle Java compile le fichier de classe, elle ne complète pas le fichier de classe complet ; il n'en compile qu'une partie selon les besoins. Cela évite une analyse syntaxique lourde de Du code source complet. Ce type de compilation est appelé compilation. JIT ou Just-In-Time. JVM dépend de la plate-forme (OS) Génération de code JIT est orienté plate-forme et génère le code d'octet natif donc plus rapide que la JVM :)

2
ABraham K

La machine virtuelle Java (JVM) fournit l’environnement complet pour l’exécution d’un programme Java. Il s'intègre au système d'exploitation, charge des classes et exécute des programmes. Le compilateur Just-In-Time (JIT) est juste un petit élément qui peut être désactivé (-Xint) mais qui, une fois activé, offre une amélioration utile des performances. Il y a eu des implémentations de la machine virtuelle Java qui n'incluaient pas de JIT, et des implémentations fonctionnant en pré-compilant Java pour obtenir du code machine de la même manière que les langages traditionnels, tels que C ou C++.

1
Craig Trader

Il le compile juste à temps pour la JVM avec optimisations.

0
niklas