Quelles sont bytecode et comment la JVM de les manipuler

j'ai entendu à plusieurs reprises que Java implements JIT(just-in-time) compilation, et ses bytecodes qui sont portables à travers les plates-formes obtenir" interprété " par JVM. Cependant, je ne sais pas vraiment ce que sont les bytecodes et ce que le JVM signifie réellement dans L'architecture Java language; j'aimerais en savoir plus à leur sujet.

16
demandé sur Justin Johnson 2010-02-05 00:08:44

7 réponses

la JVM (Java Virtual Machine) a un jeu d'instructions comme une vraie machine. Le nom donné à ce jeu d'instructions Est Java Bytecode. Il est décrit dans la Java Virtual Machine Specification . D'autres langues sont traduites en bytecode avant l'exécution, par exemple ruby et python. Le bytecode de Java est à un niveau assez bas tandis que celui de python est beaucoup plus élevé.

interprétation et la compilation JIT sont deux différentes stratégies pour exécuter bytecode. Processus d'interprétation bytecodes un à la fois faisant les changements à l'état machine virtuelle qui sont encodés dans chaque instruction. JIT compilation traduit le bytecode en instructions natives de la plate-forme hôte qui effectuent des opérations équivalentes.

L'interprétation de

est généralement rapide au démarrage mais lente au cours de l'exécution, tandis que JIT a plus de frais généraux de démarrage mais fonctionne plus rapidement par la suite. Les JVM modernes utilisent une combinaison de l'interprétation et les techniques JIT pour tirer profit des deux. Le bytecode est d'abord interprété alors que le JIT le traduit en arrière-plan. Une fois la compilation JIT terminée, la JVM passe à l'utilisation de ce code au lieu de l'interpréteur. Parfois la compilation JIT peut produire de meilleurs résultats que la compilation à l'avance utilisée pour C et C++ car elle est plus dynamique. La JVM peut suivre la fréquence à laquelle le code est appelé et quels sont les chemins typiques à travers le code et utiliser cette informations pour générer du code plus efficace pendant que le programme est en cours d'exécution. La JVM peut basculer vers ce nouveau code tout comme lorsqu'elle passe initialement de l'interpréteur au code JIT.

tout comme il y a d'autres langages qui compilent du code natif, comme C, C++, Fortran; il y a des compilateurs pour d'autres langages qui produisent JVM bytecode. Un exemple est la langue scala. Je crois que groovy et jruby peuvent aussi convertir en java bytecode.

41
répondu Geoff Reedy 2014-09-16 04:00:09

Bytecode est une étape entre votre code source et le code machine réel. La JVM est ce qui prend le bytecode et le traduit en code machine.

JIT se réfère au fait que la JVM effectue cette traduction à la volée lorsque le programme est exécuté, plutôt qu'en une seule étape (comme dans un langage traditionnellement compilé/lié comme C ou c++)

le point de bytecode est que vous obtenez de meilleures performances qu'un langage strictement interprété (comme PHP par exemple) parce que le bytecode est déjà partiellement compilé et optimisé. De plus, puisque le bytecode n'a pas besoin d'être directement interprété par le CPU, il n'a pas besoin d'être lié à une architecture CPU spécifique qui le rend plus portable.

l'inconvénient est bien sûr qu'il sera généralement un peu plus lent qu'une application compilée nativement car la JVM doit encore faire un peu de travail pour traduire le code bytecode en code machine.

13
répondu Eric Petroelje 2010-02-04 21:19:04

quand vous compilez quelque chose en Java, le compilateur génère un bytecode. C'est le code natif de la Machine virtuelle Java. Le JVM traduit alors le bytecode en code natif pour votre processeur/architecture, c'est là que le JIT se produit. Sans JIT, la JVM traduirait le programme une instruction à la fois, ce qui est très lent.

1
répondu Cesar 2010-02-04 21:19:42

Oracle jdk

code de programmation qui, une fois compilé, est exécuté par une machine virtuelle au lieu du processeur de l'ordinateur. En utilisant cette approche, le code source peut être exécuté sur n'importe quelle plate-forme une fois qu'il a été compilé et exécuté à travers la machine virtuelle.

Bytecode est le format compilé pour les programmes Java. Une fois qu'un programme Java a été converti en bytecode, il peut être transféré à travers un réseau et exécuté par Java Virtual Machine (JVM). Les fichiers Bytecode ont généralement un .extension de classe.

1
répondu Ali Yeganeh 2017-12-01 16:10:21

Bytecode est l'équivalent JVM des instructions de langage machine.

0
répondu Kaleb Brasee 2010-02-04 21:23:02

jcyang a déjà fourni un lien vers wikipedia, mais celui-ci correspond mieux à votre question:

Bytecode Java

le compilateur Java compile le code source Java vers les fichiers de classe. Les méthodes de la classe sont traduites en code octet et la machine virtuelle Java (JVM) interprète ce code octet. Un compilateur juste à temps (JIT) peut être utilisé pour traduire le code octet en code machine pour accélérer l'exécution des méthodes de classe.

0
répondu Andreas_D 2010-02-04 21:27:55

JVM est une machine virtuelle qui est utilisée pour exécuter du code Java. Nous pouvons comparer JVM avec un compilateur car sans lui nous ne pouvons pas compiler du code Java et faire des applications. JVM n'est rien d'autre qu'un morceau de code qui témoignera de votre code Java. La tâche principale de JVM est de convertir le code Java en bytecode Java et de le compiler. Cela rend le développement de Java facile. Consultez cet article si vous voulez en savoir plus sur comment Java Virtual Machine Œuvres?

-1
répondu Bessie Hamilton 2017-09-13 11:17:51