C'est la ou est "l'erreur". C'est aussi pourquoi tu parle spontanément de machine virtuelle.
Un "cold start" (ou premier démarrage de l'application) en C# est desastreux en effet : c'est LA que le JIT intervient pour compiler en code natif l'application. Et le resultat de cette compilation, tenez vous bien : est sauvegardée dans un cache !!!
Et quelle est l'intéret de faire ca me direz-vous ? Et bien la prochaine fois que l'application va tourner, plutot que de compiler encore, on réutilise le cache .
Et le JIT pendant ce temps la ? Il se tourne les pouces , et ne consomme pas de ressources... (autre qu'un peu de mémoire surement, mais faut pas exagérer...).
Dément n'est-ce pas ?
C'est pour ca, que autre le terme, et malgrès que le JIT va compiler a la volée a un moment, c'est bien loin d'etre une machine virtuelle ou le code est constemment compilé/interprété.
En plus JIT ca veut rient dire, enfin si Just In Time, mais la dénomination officielle est JIT compiler. Le code est compilé juste au moment du runtime. C'est comme si vous lanciez un GCC sur votre code C pour "l'executer" après.
Bon ce n'est pas tout a fait vrai l'histoire du GCC : en réalité, il existe 3 modes pour le compileur JIT :
- Compilation en entier de l'application au (premier) démarrage, l'image est gardé dans le cache. Pas de couts supplémentaires durant l'execution (cela ce rapproche de l'utilisation de NGen par exemple)
- Compilation partie par partie, suivant ce qui est utilisé dans l'application, les morceaux générés sont gardés dans le cache (par défaut). Du coup, cela permet un cold start plus rapide, mais la première exécution d'un morceau de code nécessite des ressources supplémentaires (il faut le compiler). Ce qui est généré est sauvegaradé, donc les éxécution suivantes seront plus rapides.
- Compilation "a la volée" (ce qui se rapproche le plus de ce que vous dites) : le code a besoin d'etre recompilé a chaque foi, rien n'est gardé dans le cache : le JIT a besoin d'etre actif en permanence, et consomme effectivement des ressources tout le temps.
EDIT :
Si j'ai tout lu ce que tu as dit screetch.
Ensuite je ne suis pas un "fanboy" du C#, j'aime bien le C# c'est vrai, mais quand des choses fausses sont dites, j'aime bien les corriger c'est tout...
Après si vous préférez rester dans votre débat entre gens "convaincus" et surtout que personne ne vienne vous dire que vous dites des choses pas exactes ca peut se faire aussi...
Partager