Est la JVM d'un compilateur ou d'un interprète?
J'ai une question très simple sur la JVM: est-il un compilateur ou un interpréteur?
Si il est un interprète, alors que penser de compilateur JIT qui existent à l'intérieur de la JVM?
Si ni la, alors quelle est exactement la JVM? (Je ne veux pas la définition de base de la jVM de la conversion de code octet de code spécifique de l'ordinateur etc.)
- La JVM est une machine virtuelle. Bytcode se passe dans, les effets observables du programme. Tout le reste est un détail d'implémentation.
- Oui, il n'est pas "la" de la JVM, il existe plusieurs implémentations de la spécification.
- veuillez s'il vous plaît écrire que comme une réponse. J'avais vraiment envie de upvote cette réponse.
- Je ne veux pas. Je ne pense pas que cela répond à la question posée ici - c'est un point de vue utile, mais la question (clairement indiqué dans le titre et dans le post) fait explicitement la demande de ces détails de mise en œuvre.
- Juste assez. Je dirais que c'est une réponse à la "Si ni, alors, quelle est exactement la JVM?" bien. (Comme une Machine Virtuelle Java est plus d'une spécification de mise en œuvre.)
Vous devez vous connecter pour publier un commentaire.
D'abord, nous allons avoir une idée claire sur les termes suivants
Javac
est un Compilateur Java -- Compile votre code Java dans BytecodeJVM
est la Machine Virtuelle Java -- Exécute/Interprète/traduit du Bytecode dans Code Machine NatifJIT
est Juste À Temps Compilateur -- Compile le bytecode séquences d'instructions en code machine à runtime avant de l'exécuter en mode natif. Son but principal est de faire du lourd, des optimisations de performance.Alors maintenant, nous allons trouver des réponses à vos questions..
1)
JVM: is it a compiler or an interpreter?
-- Ans: Interprète2)
what about JIT compiler that exist inside the JVM?
-- Ans: Si vous lisez cette réponse complètement, vous le savez probablement maintenant3)
what exactly is the JVM?
-- Ans:.class
fichier dans la RAMEspère que cela vous a aidé..
C'est un peu des deux, mais ni dans le sens traditionnel du terme.
Moderne Jvm prendre bytecode et le compiler en code natif lors de la première de besoin. "JIT" dans ce contexte signifie "juste à temps". Il agit comme un interprète de l'extérieur, mais vraiment dans les coulisses, il est en train de compiler en code machine.
La JVM ne doit pas être confondu avec le compilateur de Java, qui compile le code source en bytecode. Donc, il n'est pas utile d'envisager un "compilateur", mais plutôt de savoir que dans le fond il fait certains de compilation.
Comme @delnan déjà dit dans la section des commentaires, c'est ni.
JVM est une machine abstraite de course Le bytecode Java.
JVM a plusieurs implémentations:
...et beaucoup d'autres.
La plupart des autres réponses lorsque l'on parle de la JVM se référer soit à un HotSpot ou
un certain mélange de la méthode ci-dessus pour la mise en œuvre de la JVM.
C'est les deux. Il commence par l'interprétation du bytecode et peut (doit-il décider qu'il vaut la peine) puis compilez ce code binaire en code machine natif.
C'est les deux. Il est capable d'interpréter le bytecode, et de le compiler en code natif.
Comme d'autres l'ont dit, il est les deux! Si vous voulez consulter de bonne de détails que vous pouvez voir:Cette IBM Description
JVM ont à la fois du compilateur et de l'interprète. Parce que le compilateur compile le code et génère du bytecode. Après que l'interprète convertit bytecode à la machine compréhensible code.
Exemple: Écrire et compiler un programme et il fonctionne sur Windows. Prendre le .fichier de la classe à un autre système d'exploitation (Unix) et il sera exécuté en raison de l'interprète qui convertit le bytecode de la machine compréhensible code.