Les performances de pratiquement n'importe quel programme s'amélioreront si elles sont compilées, exécutées avec le profilage, et les résultats sont renvoyés dans le compilateur pour un second passage. Les chemins de code réellement utilisés seront optimisés de manière plus agressive, les boucles déroulées exactement au bon degré, et les chemins d'instructions chauds arrangés pour maximiser les coups de $.
Toutes les bonnes choses, mais il est presque jamais fait parce qu'il est ennuyeux de passer par tant d'étapes pour construire un binaire.
Ceci présente l'avantage d'exécuter le bytecode pendant un moment avant de le compiler en code natif: les informations de profilage sont automatiquement disponibles. Le résultat après la compilation Just-In-Time est un code natif hautement optimisé pour les données spécifiques que le programme est en train de traiter. Etre capable d'exécuter le bytecode permet également une optimisation native plus agressive qu'un compilateur statique peut utiliser en toute sécurité. Par exemple, si l'un des arguments d'une fonction est toujours noté NULL, toute la gestion de cet argument peut simplement être omise du code natif. Il y aura une brève vérification de validité des arguments dans la fonction prologue, si cet argument n'est pas NULL, la machine virtuelle abandonne le bytecode et recommence à profiler.
4 ans plus tard ... Portabilité: les compilateurs qui produisent du code natif peuvent compiler entre eux, comme gc (le compilateur officiel [Go] (http://golang.org/)) qui le rend aussi simple. Sécurité: [Native Client] (https://developers.google.com/native-client/) exécute du code natif dans un sandbox, limitant ainsi ses autorisations. Taille: rarement un problème ces jours-ci, même pour les appareils mobiles. –
@Zippoxer Qu'est-ce qui se passe avec les quatre ans? La compilation croisée est un concept très ancien. Mais vous devez toujours compiler le code pour chaque plate-forme séparément. La virtualisation n'est pas non plus un nouveau concept, mais la virtualisation du code écrit pour l'exécution native n'est pas la même chose que la virtualisation du code qui est spécifiquement conçu pour être exécuté dans un bac à sable. En ce qui concerne la taille, je n'appellerais pas du tout le code CISC Java du tout. La même chose vaut pour CIL. – Malcolm