33 votes

Que fait un compilateur JIT ?

Je viens de regarder les vidéos de la conférence Google IO et ils ont parlé du compilateur JIT qu'ils ont inclus dans Android. Ils ont montré une démonstration de l'amélioration des performances grâce au compilateur JIT. Je me suis demandé ce que fait exactement un compilateur JIT et j'ai voulu connaître l'avis de différentes personnes.

Alors, quel est le rôle d'un compilateur JIT ?

3 votes

34voto

PauliL Points 830

Le code Java est normalement distribué sous forme de bytecode, qui est pseudocode indépendant de la machine . (La même idée a été utilisée précédemment dans Système UCSD-p développé dans les années 70). L'avantage de cette méthode est que la même application peut être exécutée sur différents processeurs et systèmes d'exploitation. En outre, le bytecode est souvent plus petit que l'application compilée.

L'inconvénient est que l'interprétation du code est lent par rapport à l'exécution d'un code compilé. Pour résoudre ce problème, Compilateur JIT a été développé. Le compilateur JIT compile le code en code machine juste avant l'exécution du code. Cela accélère l'exécution par rapport à l'interpréteur, mais un temps supplémentaire est consacré à la compilation à chaque fois que le programme est exécuté. En outre, comme le compilateur JIT doit compiler rapidement, il ne peut pas utiliser les techniques d'optimisation complexes qui sont utilisées dans les compilateurs statiques.

Une autre approche consiste à HotSpot la compilation. Il fonctionne initialement comme un interprète, mais détecte ensuite les routines les plus utilisées et ne compile que celles-ci. L'avantage est qu'il n'y a pas de retard initial dû à la compilation. En outre, le compilateur HotSpot peut effectuer un profilage pendant l'exécution, puis fournir une optimisation plus forte pour les routines les plus importantes. Il peut même recueillir des informations de sorte que lorsque vous exécutez la même application encore et encore, elle s'exécute de plus en plus rapidement. Vous trouverez de plus amples informations sur la compilation HotSpot à l'adresse suivante cet article (tnx Pangea pour le lien).

Bien sûr, au lieu d'utiliser un compilateur JIT, vous pourriez simplement utiliser un compilateur statique pour compiler le bytecode pour votre machine. Cela permet une optimisation complète et vous n'avez pas besoin de compiler à nouveau à chaque fois que vous exécutez l'application. Toutefois, dans les téléphones et les pages Web, vous n'exécutez souvent le code (ou l'applet) qu'une seule fois, de sorte que le compilateur JIT peut être un meilleur choix.

Mise à jour

Les fichiers bytecode Python ont l'extension .py. Lorsque vous exécutez le fichier bytecode, le compilateur JIT Python produit un fichier compilé .pyc. La prochaine fois que vous exécutez le même programme, si le fichier .py n'a pas changé, il n'est pas nécessaire de le compiler à nouveau, mais Python exécute le fichier .pyc précédemment compilé. Cela permet d'accélérer le démarrage du programme.

0 votes

@PauliL : si le JIT transforme le code d'octet en format compréhensible par la machine, alors comment le code d'octet est-il indépendant de la plateforme ?

0 votes

@ShardaPrasadJaiswal : Le bytecode est indépendant de la plateforme. Le compilateur JOT le compile dans le code natif de votre ordinateur lorsque vous exécutez le programme.

14voto

David M Points 45808

JIT est l'abréviation de "just in time" (juste à temps). Un compilateur JIT compile le code, qui est souvent dans un langage intermédiaire comme le bytecode Java ou le IL de Microsoft, en code natif, exécutable, et il le fait au moment où le code est appelé. Ainsi, jusqu'à ce que le code soit appelé, il n'existe que sous la forme d'un bytecode ou d'un IL portable, non spécifique à la machine, puis, lorsqu'il est appelé, du code natif est généré (qui est ensuite réutilisé lors des appels suivants).

7voto

Skilldrick Points 33002

C'est un compilateur juste-à-temps, à mi-chemin entre un interprète et un compilateur (c'est-à-dire qu'il compile, mais juste avant que le code ne soit exécuté).

Cela permet d'optimiser la compilation en utilisant des informations dynamiques connues uniquement au moment de l'exécution (car les compilateurs s'exécutent généralement de manière statique, et n'ont donc accès qu'aux informations de compilation). Elles sont beaucoup plus difficiles à écrire, mais peuvent donner lieu à d'importantes améliorations des performances.

Pour plus d'informations, comme toujours, voir Wikipédia :

En informatique, la compilation juste-à-temps (JIT), également appelée traduction dynamique, est une technique permettant d'améliorer les performances d'exécution d'un programme informatique. Traditionnellement, les programmes informatiques avaient deux modes d'exécution, soit l'interprétation, soit la compilation statique (en avance sur le temps). Le code interprété était traduit d'un langage de haut niveau en code machine de façon continue lors de chaque exécution, tandis que la compilation statique traduisait le code en code machine avant l'exécution, et ne nécessitait cette traduction qu'une seule fois.

Les compilateurs JIT représentent une approche hybride, la traduction s'effectuant en continu, comme avec les interprètes, mais avec une mise en cache du code traduit pour minimiser la dégradation des performances. Ils offrent également d'autres avantages par rapport au code compilé statiquement au moment du développement, comme la gestion des types de données liés tardivement et la possibilité d'appliquer des garanties de sécurité.

3voto

Paolo Points 11860

JIT = Just in Time. Il s'agit d'un processus par lequel un programme qui serait autrement interprété (par exemple, les bytecodes Java ou le code Javascript) est converti en code machine natif à la volée pendant son exécution afin d'améliorer les performances.

Certains des avantages sont que le compilateur JIT peut voir les points chauds et appliquer des optimisations plus agressives, il peut également tirer parti de toutes les extensions du processeur actuel comme SSE2.

Cette question peut avoir plus d'informations : Comment un compilateur JIT améliore-t-il les performances des applications ?

2voto

Filip Ekberg Points 22189

Alors, quel est le rôle d'un JAT ? compilateur ?

Comme d'autres l'ont mentionné, c'est l'abréviation de "Just In Time", ce qui, dans ce sens, signifie "Juste à temps pour l'exécution".

Lorsque vous compilez des programmes en code machine, ils sont souvent destinés à une certaine plate-forme.

Par conséquent, JIT a été "inventé", vous voulez compiler les derniers morceaux de votre code pour la plate-forme d'exécution, alors voyez-le comme un compilateur/optimiseur "avant l'exection".

JIT nous facilite la vie et permet (espérons-le) à nos applications de fonctionner plus rapidement.

Il existe bien sûr d'autres les objectifs de la compilation JIT l'exemple ci-dessus n'en est qu'un exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X