Recherche…


Remarques

Histoire

Le compilateur Symantec JIT était disponible dans Sun Java à partir de la version 1.1.5, mais il avait des problèmes.

Le compilateur Hotspot JIT a été ajouté à Sun Java dans la version 1.2.2 en tant que plug-in. Dans Java 1.3, JIT était activé par défaut.

(Source: Quand Java a-t-il un compilateur JIT?

Vue d'ensemble

entrer la description de l'image ici

Le compilateur Just-In-Time (JIT) est un composant de l'environnement d'exécution Java ™ qui améliore les performances des applications Java au moment de l'exécution.

  • Les programmes Java sont constitués de classes, qui contiennent des bytecodes indépendants de la plate-forme pouvant être interprétés par une JVM sur de nombreuses architectures informatiques différentes.
  • Lors de l'exécution, la machine virtuelle Java charge les fichiers de classe, détermine la sémantique de chaque bytecode individuel et effectue le calcul approprié.

L'utilisation supplémentaire du processeur et de la mémoire lors de l'interprétation signifie qu'une application Java fonctionne plus lentement qu'une application native.

Le compilateur JIT améliore les performances des programmes Java en compilant les codes d'octets dans le code machine natif au moment de l'exécution.

Le compilateur JIT est activé par défaut et est activé lors de l'appel d'une méthode Java. Le compilateur JIT compile les bytecodes de cette méthode en code machine natif, en le compilant "just in time" pour s'exécuter.

Lorsqu'une méthode a été compilée, la machine virtuelle Java appelle directement le code compilé de cette méthode au lieu de l'interpréter. Théoriquement, si la compilation ne nécessitait pas de temps processeur et d'utilisation de la mémoire, la compilation de chaque méthode pourrait permettre à la vitesse du programme Java de s'approcher de celle d'une application native.

La compilation JIT nécessite du temps processeur et de la mémoire. Au démarrage de la JVM, des milliers de méthodes sont appelées. La compilation de toutes ces méthodes peut affecter de manière significative le temps de démarrage, même si le programme atteint finalement de très bonnes performances de pointe.


  • En pratique, les méthodes ne sont pas compilées la première fois qu'elles sont appelées. Pour chaque méthode, la machine virtuelle Java conserve un call count qui est incrémenté chaque fois que la méthode est appelée.
  • JVM interprète une méthode jusqu'à ce que son nombre d'appels dépasse un seuil de compilation JIT.
  • Par conséquent, les méthodes souvent utilisées sont compilées peu après le démarrage de la JVM et les méthodes moins utilisées sont compilées beaucoup plus tard ou pas du tout.
  • Le seuil de compilation JIT aide la JVM à démarrer rapidement et à améliorer les performances.
  • Le seuil a été soigneusement sélectionné pour obtenir un équilibre optimal entre les temps de démarrage et les performances à long terme.
  • Une fois qu'une méthode est compilée, son nombre d'appels est remis à zéro et les appels ultérieurs à la méthode continuent à incrémenter son nombre.
  • Lorsque le nombre d'appels d'une méthode atteint un seuil de recompilation JIT, le compilateur JIT le compile une seconde fois, en appliquant une plus grande sélection d'optimisations que la compilation précédente.
  • Ce processus est répété jusqu'à ce que le niveau d'optimisation maximal soit atteint.

Les méthodes les plus utilisées d'un programme Java sont toujours optimisées de manière plus agressive, optimisant ainsi les avantages de l'utilisation du compilateur JIT.

Le compilateur JIT peut également mesurer operational data at run time et utiliser ces données pour améliorer la qualité des recompilations ultérieures.

Le compilateur JIT peut être désactivé, auquel cas le programme Java entier sera interprété. La désactivation du compilateur JIT n'est pas recommandée, sauf pour diagnostiquer ou contourner les problèmes de compilation JIT.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow