JIT vs Interprètes
Je ne pouvais pas trouver la différence entre JIT et des Interprètes.
Jit intermédiaire des Interpréteurs et Compilateurs. Au cours de l'exécution, il convertit de byte code en code machine ( JVM ou Réelle de la Machine ?) Pour la prochaine fois, il faut partir du cache et s'exécute
Suis-je le droit?
Interprètes s'exécuter directement du bytecode sans le transformer en code machine. Est ce que le droit?
La façon dont le vrai processeur dans notre pc de comprendre le mode d'.?
Veuillez effacer mes doutes.
- Jusqu'à maintenant, les ordinateurs ne pas exécuter quoi que ce soit d'autre que du code machine.
- Interprètes convertit en bytecode correspondant du code machine natif d'exécution, le bytecode ne sont pas directement à l'exécution.
- Je suis venu ici pendant googler, si vous êtes comme moi, vous pouvez trouver plus d'informations sur ce grande réponse sur SoftwareEngineering
Vous devez vous connecter pour publier un commentaire.
Première chose d'abord:
Avec la JVM, à la fois interprète et le compilateur (la JVM compilateur et non pas le code source du compilateur comme javac) produire du code natif (aka Machine code de langue de la physique sous-jacente de l'UC comme x86) à partir de de byte code.
Quelle est la différence alors:
La différence est dans la façon de générer du code natif, comment optimisé, il est également coûteux d'optimisation. De manière informelle, un interprète assez bien convertit chaque octet d'instruction en code natif correspondant à l'instruction de la recherche d'un prédéfini JVM-instruction instruction machine de cartographie (voir ci-dessous pic). Fait intéressant, une nouvelle accélération de l'exécution peut être réalisé, si nous prenons une section de byte-code et de le convertir en code machine - car en considérant un ensemble de logiques section fournit souvent des chambres à des fins d'optimisation, par opposition à la conversion (interprétation) chaque ligne dans l'isolement (d'instruction machine). Cette loi même de la conversion d'une section de byte-code (probablement optimisé) instruction machine est appelée la compilation (dans le contexte actuel). Lorsque la compilation est effectuée au moment de l'exécution, le compilateur est appelé compilateur JIT.
La co-relation et coordination:
Depuis Java designer est allé pour (matériel & OS) portabilité, ils avaient choisi l'interprète de l'architecture (plutôt de style c de la compilation, de l'assemblage et de liaison). Cependant, afin d'obtenir plus de vitesse, un compilateur est également ajouté à une JVM. Néanmoins, comme un programme va être interprété (et exécuté en physique CPU) "hotspot"s sont détectés par la JVM et les statistiques sont générées. Par conséquent, l'utilisation des statistiques de l'interprète, les sections devenir candidat pour la compilation (optimisé en code natif). En fait, c'est fait à la volée (donc compilateur JIT) et de la compilation des instructions machines sont utilisées par la suite (plutôt que d'être interprétées). De façon naturelle, JVM également les caches de ces compilé les morceaux de code.
Mots de prudence:
Ces sont assez bien les concepts fondamentaux. Si un responsable de l'implémentation de la JVM, est-il un peu différente façon, ne soyez pas surpris. Donc, ce pourrait être le cas pour les VM dans d'autres langues.
Mots de prudence:
Des déclarations comme "interprète exécute du code octet dans un processeur virtuel", "interprète exécute byte code directement", etc. sont tout à fait correct aussi longtemps que vous comprenez qu'à la fin, il y a un ensemble d'instructions machine qui doivent s'exécuter dans un matériel physique.
Quelques Bonnes Références: [je n'ai pas fait de recherche approfondie si]
Machine par Hitoshi Oi
PS: j'ai utilisé des termes suivants interchangebly - 'code natif', 'machine code de langue', 'instructions machine", etc.
Interprète: Lit de votre code source ou de certains représentation intermédiaire (bytecode), et l'exécute directement.
Compilateur JIT: Lit de votre code source, ou plus généralement une représentation intermédiaire (bytecode) de celui-ci, qui compile à la volée et exécute code natif.
Oui, vous êtes.
Oui, il est.
Dans le cas des interprètes, la machine virtuelle exécute un natif de la JVM procédure correspondant à chaque instruction de byte code pour produire le comportement attendu. Mais ton code n'est pas compilé en code natif, comme avec les compilateurs Jit. La JVM émule le comportement attendu pour chaque instruction.
Un Compilateur JIT traduit de byte code en code machine, puis d'exécuter le code de l'ordinateur.
Interprètes lire votre langage de haut niveau (l'interprète) et de l'exécuter ce qui est demandé par votre programme. Les interprètes ne sont normalement pas en passant par byte-code et de la compilation jit.
Mais les deux mondes ont faire fondre à cause de nombreux interprètes ont, prenez le chemin à l'intérieur de l'octet-compilation et jit-compilation, pour une meilleure vitesse d'exécution.
Je suis assez sûr que JIT tours de byte code en code machine pour quelle que soit la machine que vous êtes en cours d'exécution sur la droite qu'il faut. L'alternative est d'exécuter le code d'octets dans une machine virtuelle java. Je ne suis pas sûr si ce le même que l'interprétation du code, depuis que je suis plus familier avec ce terme utilisé pour décrire l'exécution d'un script (non compilé) des langages comme ruby ou perl.
La première fois qu'une classe est référencé dans la JVM de l'équipe d'Exécution du Moteur de re-compile le .les fichiers de classe (primaire Binaires) généré par le Compilateur Java contenant de la JVM du Jeu d'Instructions pour les fichiers Binaires contenant des Instructions du système d'Ensemble. JIT magasins et réutilise ceux de recompiler les fichiers binaires à partir de la Mémoire d'aller de l'avant, il y en réduisant l'interprétation du temps et de prestations de code Natif d'exécution.
Et il y a une autre saveur qui ne Adaptative d'Optimisation par l'identification de la plupart des réutilisé une partie de l'application et de l'application de JIT seulement, il y a en optimisant sur l'utilisation de la mémoire.
D'autre part, un plain old java interprète interprète une JVM de l'instruction de la classe fichier à la fois et appelle une procédure contre elle.
Trouver un détail de comparaison ici