Je regarde dans le compilateur Java Jit et je ne peux pas comprendre pourquoi une partie du code est toujours interprétée. Pourquoi le compilateur JIT ne traduit-t-il pas tout en code natif? L'interprétation est beaucoup plus lente, je manque quelque chose? P>
3 Réponses :
Si vous exécutez un point jvm comme hotspot, il compile de manière opportuniste, ce qui ne se concentre que sur le code qui exécute fréquemment. Il détermine le code à optimiser à la volée en comptant la fréquence de chaque bloc de code (ou méthode - je ne suis pas sûr que). Par conséquent, au moment du démarrage, tout est interprété. P>
L'intention derrière cela est permettant d'optimiser beaucoup plus agressifs et coûteux en nécessitant une petite fraction du code à optimiser. P>
Je pense que ce que KMDent demande est pourquoi ne pas compiler même les morceaux de code rare rarement
@Zach l: Je viens de modifier ma question.
Tout est une question de compromis p>
Deux raisons principales: p>
Par conséquent, le Java Jit prend une stratégie sensible: ne compilez pas tant que vous observerez que le même code est exécuté à plusieurs reprises, à quel point vous avez des preuves que la compilation est probablement la peine et que vous êtes en mesure de faire des informations supplémentaires. optimisations. P>
Le terme «compilateur JIT» est d'au moins 10 ans. Ce que vous avez effectivement enquêté est le hotspot jvm. I> Ils ne sont pas la même chose.