La JVM est-elle un compilateur ou un interpréteur?


J'ai une question très basique sur JVM: est-ce un compilateur ou un interpréteur?

S'il s'agit d'un interpréteur, qu'en est-il du compilateur JIT existant dans la JVM?
Si ni l'un ni l'autre, alors quelle est exactement la JVM? (Je ne veux pas la définition de base de la jVM de conversion du code d'octet en code spécifique à la machine,etc.)

Author: Mat, 2011-10-06

7 answers

Tout d'abord, ayons une idée claire des termes suivants

Javac est-ce que le compilateur Java Comp Compile votre code Java en Bytecode

JVM est-ce que la Machine virtuelle Java Runs Exécute/ Interprète / traduit le Bytecode en Code Machine natif

JIT Juste À Temps Compilateur -- Compile le bytecode séquences d'instructions en code machine à runtime avant de l'exécuter en mode natif. Son objectif principal est de faire de lourdes optimisations de performances.

Alors maintenant, trouvons des réponses à vos questions..

1)JVM: is it a compiler or an interpreter? -- Réponse: Interprète

2)what about JIT compiler that exist inside the JVM? -- Réponse:, Si vous lisez cette réponse complètement, vous le savez probablement maintenant

3)what exactly is the JVM? -- Réponse:

  • JVM est une plate-forme virtuelle qui réside sur votre RAM
  • Son composant, Class loader charge le fichier .class dans la RAM
  • Le composant Byte code Verifier dans la JVM vérifie si il y a des violations de restriction d'accès dans votre code. (C'est l'une des principales raisons pour lesquelles java est sécurisé)
  • Ensuite, la Moteur d'Exécution de composant convertit le Bytecode en code machine exécutable

J'espère que cela vous a aidé..

 127
Author: Srikanth Bandaru, 2013-02-05 13:26:40

C'est un peu des deux, mais ni dans le sens traditionnel.

Les JVM modernes prennent le bytecode et le compilent en code natif au premier besoin. "JIT" dans ce contexte signifie "juste à temps."Il agit comme un interprète de l'extérieur, mais vraiment dans les coulisses, il compile en code machine.

La JVM ne doit pas être confondue avec le compilateur Java, qui compile le code source en bytecode. Il n'est donc pas utile de le considérer comme "un compilateur" mais plutôt de savoir que en arrière-plan, il fait une compilation.

 31
Author: Mark Peters, 2011-10-06 13:27:01

C'est les deux. Il commence par interpréter le bytecode et peut (s'il décide que cela en vaut la peine) puis compiler ce bytecode en code machine natif.

 4
Author: Paul Cager, 2011-10-06 13:25:42

C'est les deux. Il peut interpréter le bytecode et le compiler en code natif.

 4
Author: Mat, 2011-10-06 13:25:55

Comme @delnandéjà indiqué dans la section commentaire, ce n'est ni.

JVM est une machine abstraite exécution de bytecode Java.

JVM a plusieurs implémentations:

...et beaucoup d'autres.

La plupart des autres réponses en parlant de JVM font référence à HotSpot ou un mélange des approches ci-dessus pour implémenter la JVM.

 3
Author: cubuspl42, 2017-08-04 21:07:15

Comme d'autres l'ont dit, c'est les deux! Si vous voulez le renvoyer en détail, vous pouvez voir:Cette description IBM

 1
Author: DDC, 2012-02-15 15:29:49

JVM ont à la fois un compilateur et un interpréteur. Parce que le compilateur compile le code et génère du bytecode. Après cela, l'interpréteur convertit le bytecode en code compréhensible par la machine.

Exemple: Écrivez et compilez un programme et il s'exécute sous Windows. Prendre le .fichier de classe à un autre système d'exploitation (Unix) et il s'exécutera à cause de l'interpréteur qui convertit le bytecode en code compréhensible par la machine.

 -4
Author: M SANEDEEP KUMAR, 2012-05-01 08:28:57