2010-06-23 17 views
3

Je suis confondu avec le compilateur JIT,compilateur JIT et l'exécution

  1. Qu'est-ce que le compilateur JIT?
  2. Le compilateur JIT compile les codes d'octets avant chaque exécution ou à chaque chargement de la machine JVM?

Répondre

4

JIT signifie "Just In Time". C'est un compilateur qui traduit le bytecode Java en code machine natif pendant que votre programme s'exécute.

Le JIT de Sun ne compile pas tout votre bytecode à l'avance chaque fois que vous exécutez un programme Java; il contient une logique très sophistiquée pour décider quand compiler des parties du bytecode, l'un des critères qu'il utilise est la fréquence à laquelle le code est exécuté. Pour plus de détails, voir Just-in-time compilation et HotSpot (Wikipedia).

1

Le compilateur JIT est un compilateur spécialisé qui surveille l'exécution de Java bye et le compile en instructions natives si nécessaire.

Si le JIT détermine qu'une partie de votre code s'exécute très fréquemment ou que le compiler en code natif augmentera considérablement les performances, il le fera.

La compilation JIT est complètement optionnelle, et l'implémentation standard de Java vous permet de l'éteindre. Cependant, il n'y a vraiment aucune raison de l'éteindre.

+0

Est-ce que cela signifie que la compilation JIT est une option? – Tony

+0

Oui, c'est facultatif dans le sens où vous pouvez l'éteindre; Cependant, il est activé par défaut (et c'est une bonne chose). –

+0

Sur l'implémentation Java de Sun, vous pouvez désactiver la compilation JIT en utilisant l'option de ligne de commande '-Xint' mais normalement vous ne le faites pas. – Jesper

0

Le compilateur JIT était un compilateur externe juste-à-temps livré avec Java 1.1. Le terme est maintenant obsolète. Java est livré avec une JVM "HotSpot" dans laquelle la compilation est intégrée.

1

Le compilateur Just-in-time (JIT) est un programme qui transforme le bytecode Java (un programme contenant des instructions à interpréter) en instructions pouvant être envoyées directement au processeur.

Les compilateurs JIT sont fournis sous forme de bibliothèques natives indépendantes de la plate-forme. Si la bibliothèque du compilateur JIT existe, la machine virtuelle Java initialise les hooks de code natif Java Native Interface (JNI) pour appeler les fonctions JIT disponibles dans cette bibliothèque au lieu de la fonction équivalente dans l'interpréteur. La classe java.lang.Compiler est utilisée pour charger le natif. bibliothèque et démarrer l'initialisation dans le compilateur JIT.Le compilateur JIT utilise son propre invocateur. Les versions de production Sun vérifient le bit d'accès à la méthode ACC_MACHINE_COMPILED pour indiquer à l'interpréteur que le code de cette méthode a déjà été compilé et stocké dans la classe chargée.Lorsque la méthode est appelée la première fois (dépend du fournisseur JVM), le compilateur JIT compile le bloc de méthode en code natif pour cette méthode et stocké dans le bloc de code pour cette méthode.

Une fois le code compilé, le bit ACC_MACHINE_COMPILED, utilisé sur la plate-forme Sun, est défini.

La première chose à retenir est que le compilateur JIT réalise la plupart de ses améliorations de vitesse la deuxième fois (cela dépend du fournisseur JVM) qu'il appelle une méthode. Le compilateur JIT compile la méthode entière au lieu de l'interpréter ligne par ligne, ce qui peut également être un gain de performance lors de l'exécution d'une application avec le JIT activé. Cela signifie que si le code n'est appelé qu'une fois, vous ne verrez pas de gain de performance significatif. Le compilateur JIT ignore également les constructeurs de classe, si possible, gardez le code constructeur au minimum.

Le compilateur JIT atteint également un gain de performances mineur en ne pré-vérifiant pas certaines conditions aux limites Java, telles que le pointeur Null ou les exceptions hors limites de tableau.La seule façon dont le compilateur JIT sait qu'il a une exception de pointeur nul est un signal émis par le système d'exploitation. Comme le signal provient du système d'exploitation et non de la machine virtuelle Java, votre programme subit une baisse de performance. Pour garantir les meilleures performances lors de l'exécution d'une application avec le JIT, assurez-vous que votre code est très propre, sans erreurs telles que le pointeur Null ou les exceptions de tableau hors limites.

Référence: http: //java.sun.com/developer/onlineTraining/Programming/JDCBook/perf2.html