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.
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.
0 votes
@aioobe : Je ne le ferai pas. Je ne pense pas que cela réponde à la question posée ici - c'est une perspective très utile, mais la question (énoncée clairement dans le titre et dans le post) demande explicitement ces détails de mise en œuvre.
0 votes
C'est juste. Je dirais que es une réponse à la "Si ce n'est pas le cas, alors qu'est-ce que la JVM ?" partie cependant. (La machine virtuelle Java étant plus une spécification qu'une implémentation).