618 votes

Que fait un compilateur juste-à-temps (JIT)?

Qu'est-ce qu'un compilateur JIT fait spécifiquement par opposition à un compilateur non-JIT? Quelqu'un peut-il donner une description succincte et facile à comprendre?

599voto

Mark Cidade Points 53945

Un compilateur JIT s'exécute après que le programme a commencé et compile le code (généralement bytecode ou une sorte de VM instructions) à la volée (ou juste-à-temps, comme on les appelle) en une forme qui est généralement plus rapide, typiquement le PROCESSEUR de l'hôte natif du jeu d'instructions. Une équipe commune d'enquête a accès à la dynamique d'exécution d'informations tandis qu'un compilateur standard ne l'est pas et peuvent prendre de meilleures optimisations comme inline fonctions fréquemment utilisées.

Ceci est en contraste à un compilateur traditionnel qui compile tous les code en langage machine avant le programme de la première exécution.

Pour paraphraser, classique compilateurs construire l'ensemble du programme dans un fichier EXE AVANT de la première fois que vous l'exécutez. Pour plus récent de style de programmes, une assemblée est générée avec le pseudo-code (code p). Seulement APRÈS que vous exécutez le programme sur l'OS (par exemple, en double-cliquant sur son icône) le (JIT) compilateur coup de pied dans et de générer du code machine (m-code) que le processeur Intel ou ce qui te permettra de comprendre.

281voto

Craig Trader Points 8924

Au début, un compilateur a été responsable pour le tournage d'un langage de haut niveau (définie comme un niveau plus élevé que l'assembleur) dans le code de l'objet (instructions machine), qui seraient alors liés (par un éditeur de liens) dans un fichier exécutable.

À un certain moment dans l'évolution des langues, des compilateurs de dresser un langage de haut-niveau dans une pseudo-code, qui sera ensuite interprété (par un interprète) pour exécuter votre programme. Ce qui a éliminé le code de l'objet et de fichiers exécutables, et a permis à ces langues pour être portable sur plusieurs systèmes d'exploitation et plates-formes matérielles. Pascal (qui a compilé pour P-Code) a été l'un des premiers, Java et C# sont les exemples plus récents. Finalement, le terme de P-Code a été remplacé par du bytecode, puisque la plupart des pseudo-opérations sont un octet de long.

Un Juste-À-Temps (JIT) compilateur est une fonction de la durée d'exécution de l'interprète, qui, au lieu de l'interprétation du bytecode à chaque fois qu'une méthode est appelée, compile le bytecode en code machine des instructions de la machine en cours, puis d'appeler cet objet code à la place. Idéalement, l'efficacité de l'exécution de code objet permettra de surmonter l'inefficacité de recompiler le programme à chaque fois qu'il s'exécute.

80voto

HDA Points 2590

JIT-Just in time le mot lui-même dit que quand c'est nécessaire(sur demande)

Scénario typique:

Le code source est entièrement converti en code machine

JIT scénario:

Le code source sera converti en langage d'assemblage comme la structure [par ex IL(intermediate language) pour le C#,le ByteCode java].

Le code intermédiaire est converti en langage machine que lorsque les besoins de l'application qui est nécessaire codes ne sont convertis en code machine.

JIT vs Non-JIT comparaison:

  • Dans JIT pas tout le code est converti en code machine de la première partie du code qui est nécessaire sera converti en code machine alors si une méthode ou une fonctionnalité appelé n'est pas dans la machine alors que sera transformé en code machine... il réduit la charge sur le cpu.

  • Que le code machine sera généré sur le moment de l'exécution....le JIT le compilateur va produire du code machine qui est optimisé pour l'exécution de cpu de la machine de l'architecture.

JIT Exemples:

  1. En Java JIT est de la JVM(java virtual machine)
  2. En C#, il est dot net framework
  3. Dans Android DVM(la machine virtuelle Dalvik)

36voto

Aniket Thakur Points 10135

Comme d'autres l'ont mentionné

JIT est synonyme de Juste-à-Temps, ce qui signifie que le code sera compilé quand c'est nécessaire, pas avant l'exécution.

Juste pour ajouter un point à la discussion ci-dessus de la JVM maintient un compte de combien de fois qu'une fonction est exécutée. Si ce nombre dépasse une limite prédéfinie JIT compile le code en langage machine qui peut être directement exécuté par le processeur (à la différence du cas normal, javac compiler le code en bytecode puis java - l'interprète interprète le bytecode ligne par ligne convertit en code machine et exécute).

Aussi la prochaine fois que cette fonction est calculée de la même compilé code est exécuté à nouveau, contrairement à la normale de l'interprétation dans laquelle le code est interprété à nouveau, ligne par ligne. Cela rend l'exécution plus rapide.

16voto

Brian Lyttle Points 9344

JIT est synonyme de Juste-à-Temps, ce qui signifie que le code sera compilé quand c'est nécessaire, pas avant l'exécution.

Ceci est intéressant, car le compilateur peut générer du code optimisé pour votre machine. Statique compilateur, comme la moyenne de votre compilateur C, de compiler tous les code sur code exécutable sur le développeur de la machine. Donc le compilateur d'effectuer des optimisations basées sur certaines hypothèses. Il permet de compiler plus lentement et de faire plus d'optimisations, car il n'est pas de ralentir l'exécution du programme pour l'utilisateur.

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