Quelle est la différence entre un compilateur JVM et JIT (compilateur juste à temps) en Java?


Réponse 1:

JVM («Java Virtual Machine») a deux significations:

  1. Il s'agit d'un ensemble d'instructions abstrait conçu pour exécuter des programmes Java. Ce jeu d'instructions définit une machine de pile déroulante relativement simple vers laquelle les programmes source Java sont compilés; ces instructions sont stockées dans des fichiers «.class». Il s'agit d'un programme qui s'exécute sur un ordinateur réel, qui peut exécuter les instructions JVM abstraites. Une telle machine virtuelle Java inclut un «interpréteur» pour les instructions individuelles de la machine virtuelle Java, mais comprend également toutes les machines de prise en charge nécessaires pour prendre en charge l'exécution de code Java, y compris l'arithmétique, les appels de fonction, l'allocation de stockage, la collecte des ordures, la planification des threads, les chargeurs de fichiers de classe, le fichier E / S et autres accès au système d'exploitation local selon les besoins pour exécuter des applications Java complexes.

Les anciennes machines virtuelles Java ont littéralement interprété les instructions JVM une par une au moment de l'exécution. C'est facile à mettre en œuvre, c'est pourquoi cela a été fait. Mais comme tout interpréteur, une telle interprétation au moment de l'exécution produit des temps d'exécution de programme qui sont généralement plus lents que le code machine natif compilé.

Un «compilateur JIT» («JITter») est une caractéristique de la plupart des machines virtuelles Java modernes qui compile des morceaux d'instructions JVM en code machine natif en tant que nouveaux morceaux, ou des morceaux de code JVM précédemment rencontrés sont rencontrés lors de l'exécution. On pourrait utiliser un compilateur Java-code natif hors ligne (certains existent en fait) pour ce faire afin de fournir des fins de compilation par lots traditionnelles, mais ce n'est pas la façon dont le monde Java s'est déroulé.

Les JITters ont un avantage sur les compilateurs par lots: ils peuvent compiler du code qui correspond à ce qui se passe à l'exécution, et peuvent ainsi aider à optimiser les propriétés dynamiques du code Java telles que la répartition dynamique qui se produit dans les appels de méthode Java surchargés. Ils ont un inconvénient: ils ne voient pas le programme à grande échelle et ne peuvent généralement pas faire ce que font les bons compilateurs par lots: les optimisations globales. Le compromis, dans la pratique, signifie que les programmes Java compilés JIT fonctionnent plutôt bien, mais pas aussi rapidement que les programmes C ou C ++ qui sont compilés par des méthodes traditionnelles.


Réponse 2:

Le compilateur Just in time ou JIT est un composant intégral de Java Virtual Machine avec le garbage collector, qui, comme son nom l'indique, fait la compilation Just in time. Il est capable de compiler du code Java directement en langage machine, ce qui peut grandement améliorer les performances de l'application Java.

Par ailleurs, ce n'est pas garanti ce que le code sera compilé et quand. JIT compile généralement du code à chaud dans Hotspot JVM une fois que son exécution dépasse une certaine limite, par exemple une méthode sera convertie en langage machine si elle est appelée plus de 10 000 fois, etc.

Voici quelques différences supplémentaires entre JVM et JIT dans la plate-forme de programmation Java:

1) La principale différence entre JVM et JIT est son objectif, l'objectif principal de JVM est de fournir l'indépendance de la plate-forme tandis que l'objectif de JIT est d'améliorer les performances de JVM, en compilant plus de code en langage machine. Gardez à l'esprit que cette compilation prend également du temps, donc la traduction de tout le code en code natif ne vaut pas la peine. C'est pourquoi JIT compile principalement le code fréquemment utilisé en code natif.

2) Une autre différence entre JIT et JVM est que JIT fait partie de JVM. Un exemple de JIT est le Hotspot JIT d'Oracle qui est livré avec Hotspot JVM. Il est appelé hotpost parce que son compilateur Just in time compile uniquement le code chaud en langue native, code qui s'exécute 90% du temps.

Il existe une configuration de seuil, si certains codes exécutent plus que ce seuil, ils deviennent éligibles à la compilation juste à temps. Soit dit en passant, Hotspot n'est pas la seule JVM qui contient des compilateurs Just in time, il existe également d'autres JVM, par exemple le JRockit d'Oracle.

3) Enfin, JVM est un concept plus ancien que JIT. JIT a en fait inventé pour améliorer les performances de JVM après des années de version initiale de Java, tandis que la machine virtuelle Java faisait partie de la version initiale de Java.

C'est tout sur la différence entre JVM et JIT en Java. Comme je l'ai dit, JIT fait partie de la JVM et est utilisé pour améliorer les performances de la JVM en compilant ou en traduisant dynamiquement les codes d'octets Java en code de langage machine natif pendant le temps d'exécution.


Réponse 3:

Les principales différences sont:

  • JVM est une machine virtuelle Java tandis que JIT est une compilation Just In Time. JIT est le sous-ensemble de JVM qui est utilisé pour améliorer les performances de JVM. pour améliorer les performances de JVM, JIT stocke également ce code compilé.

Merci et meilleures salutations

shujat khan

coordonnées: [email protected]