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

J’ai une question très simple sur JVM: est-ce un compilateur ou un interprète?

Si c’est un interpréteur, alors qu’en est-il du compilateur JIT qui existe 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 JVM pour convertir le code d’octet en code spécifique à la machine, etc.)

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

Javac est un compilateur Java – Comstack votre code Java en Bytecode

JVM est une machine virtuelle Java – Exécute / interprète / traduit le bytecode en code machine natif

JIT est un JIT Just In Time – Comstack la séquence d’instructions donnée du bytecode en code machine à l’ exécution avant de l’exécuter en mode natif. Son objective principal est de réaliser de fortes optimisations de performance.

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

1) JVM: is it a comstackr or an interpreter?Ans: Interprète

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

3) what exactly is the JVM?Ans:

  • 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 Vérificateur de code octet dans JVM vérifie s’il existe des violations de ressortingction d’access dans votre code. (C’est l’une des principales raisons pour lesquelles Java est sécurisé)
  • Ensuite, le composant Execution Engine convertit le Bytecode en code machine exécutable

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

C’est un peu des deux, mais pas au sens traditionnel.

Les machines virtuelles Java modernes prennent le bytecode et le comstacknt dans le code natif lorsque nécessaire. “JIT” dans ce contexte signifie “juste à temps”. Il agit comme un interprète de l’extérieur, mais vraiment dans les coulisses qu’il comstack en code machine.

La JVM ne doit pas être confondue avec le compilateur Java, qui comstack le code source en bytecode. Donc, il n’est pas utile de le considérer comme un “compilateur” mais plutôt de savoir qu’en arrière-plan, il fait un peu de compilation.

C’est les deux. Il commence par interpréter bytecode et peut (s’il le juge utile), comstackr ce bytecode en code machine natif.

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

Comme @delnan déjà indiqué dans la section commentaire, ce n’est ni l’un ni l’ autre .

JVM est une machine abstraite exécutant le bytecode Java .

JVM a plusieurs implémentations:

  • HotSpot (interpréteur + compilateur JIT )
  • Dalvik (interpréteur + compilateur JIT)
  • ART (compilateur AOT + compilateur JIT)
  • GCJ (compilateur AOT)
  • JamVM (interprète)

… et beaucoup d’autres .

La plupart des autres réponses quand on parle de JVM font référence à HotSpot ou à une combinaison des approches ci-dessus pour implémenter la JVM.

Comme d’autres l’ont dit, c’est les deux! Si vous voulez le consulter en détail, vous pouvez voir: This IBM Description

JVM possède à la fois un compilateur et un interpréteur. Parce que le compilateur comstack le code et génère le bytecode. Après cela, l’interpréteur convertit le bytecode en code compréhensible par l’ordinateur.

Exemple: écrivez et comstackz un programme et il fonctionne sous Windows. Prenez le fichier .class sur 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 l’ordinateur.