87 votes

La JVM est-elle un compilateur ou un interprète ?

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

S'il s'agit d'un interprète, qu'en est-il du compilateur JIT qui existe à l'intérieur de la JVM ?
Si ce n'est ni l'un ni l'autre, alors qu'est-ce que la JVM ? (Je ne veux pas de la définition de base de la JVM qui consiste à convertir le code d'octet en code spécifique à la machine, etc.)

18 votes

La JVM est une machine virtuelle. Le bytcode entre, les effets observables du programme se produisent. Tout le reste est un détail d'implémentation.

1 votes

Oui, il n'y a pas "la" JVM, il y a plusieurs implémentations de la spécification.

0 votes

@delnan, s'il vous plaît, écrivez cela comme une réponse. J'ai vraiment envie d'upvoter une telle réponse.

0voto

Sarth Points 205

Javac est un compilateur mais pas un compilateur traditionnel. Un compilateur convertit typiquement le code source en langage de niveau machine pour l'exécution et cela est fait en une seule fois, c'est-à-dire que le code entier est pris et converti en langage de niveau machine en UNE SEULE fois. (plus d'informations à ce sujet ci-dessous). Alors que JavaC le convertit en Bytecode au lieu du langage de niveau machine.

Le JIT est un compilateur Java qui fait également office d'interprète. Un compilateur classique convertit tout le code en une seule fois, du code source au langage machine. Au lieu de cela, JIT va ligne par ligne (l'exécution ligne par ligne est une caractéristique des interprètes) et convertit le bytecode généré par JavaC en langage de niveau machine et l'exécute. La JVM qui contient le JIT a de multiples implémentations. Hotspot étant l'une des principales pour la programmation Java. L'implémentation de Hotspot permet à JIT d'optimiser l'exécution en convertissant des morceaux de code répétitifs en langage de niveau machine en une seule fois (comme un compilateur tel que mentionné ci-dessus) afin qu'ils puissent être exécutés plus rapidement au lieu de convertir chaque ligne de code 1 par 1. Ainsi, la réponse n'est pas noire et blanche par rapport aux définitions typiques de compilateur et d'interprète.

C'est ce que je comprends après avoir lu plusieurs réponses en ligne, des blogs, etc. Si quelqu'un a des suggestions pour améliorer cette compréhension, n'hésitez pas à le faire.

-6voto

La JVM possède à la fois un compilateur et un interprète. En effet, le compilateur compile le code et génère le bytecode. Ensuite, l'interpréteur convertit le bytecode en code compréhensible par la machine.

Exemple : Ecrivez et compilez un programme et il fonctionne sous Windows. Transportez le fichier .class sur un autre système d'exploitation (Unix) et il s'exécutera grâce à l'interpréteur qui convertit le bytecode en code compréhensible par la machine.

1 votes

Vous avez oublié de désactiver les majuscules :)

7 votes

Faux. Vous compilez d'abord le code source en bytecode (cela n'a rien à voir avec la JVM), puis la JVM interprète le bytecode et le compile en code natif (mais peut-être pas toutes les parties).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X