La performance de n'importe quel programme permettra d'améliorer si il est compilé, exécuté avec le profilage, et les résultats renvoyés dans le compilateur pour un second passage. Les chemins de code qui sont effectivement utilisés seront de façon plus agressive optimisé, boucles déroulé exactement à la bonne mesure et le chaud chemins d'instructions arrangé pour maximiser j'$ hits.
Toutes les bonnes choses, mais il n'est presque jamais fait parce que c'est ennuyeux de passer par de nombreuses étapes pour créer un fichier binaire.
C'est l'avantage de l'exécution du bytecode pour un certain temps avant de le compiler en code natif: les informations de profilage est automatiquement disponible. Le résultat après Juste-À-Temps de compilation est hautement optimisé en code natif pour les données spécifiques, le programme est en cours de traitement.
Être en mesure d'exécuter le bytecode permet également plus agressif natif d'optimisation de statique compilateur peut utiliser en toute sécurité. Par exemple si l'un des arguments d'une fonction est noté pour toujours NULL, toutes les manipulations pour cet argument peut être simplement omis dans le code natif. Il y aura une brève vérification de la validité des arguments de la fonction prologue, si cet argument n'est pas NULL, la VM abandonne retour à la bytecode et commence à le profilage de nouveau.