Tu te demandes donc pq "en natif" ne va pas plus vite qu'avec une JVM?
La réponse à cette question est complexe, je vais cependant tenter de te donner quelques points de réponses:
- une JVM, de nos jours, n'est plus si "VM" que ça, c'est surtout un bon JITter, autrement dit ton bytecode devient du code natif, qui n'est donc pas si lent à exécuter que cela. (c'est du .NET, mais Quake2.NET tourne relativement bien, quelques pourcent de diff avec le code natif... optimisé en asm).
- Java (et .NET et tout les beaux langages maheureusement sous utilisé tel que python et ruby) apporte quelques choses que les langages natifs n'ont pratiquement pas: l'introspection. Et eclipse semble en abuser, il faut donc mimer ce comportement en natif, ce qui revient pratiquement à faire une JVM.
- Une version native se base sur les composant natif existant, il faut donc arriver à mapper les classes java aux api native, ce qui n'est pas facile. Et tu te retrouves avec le problème suivant: java utilise swt qui utilise gtk, en natif, tu dois faire le natif qui utilise l'émulation de swt qui utilise gtk... tu as donc des étapes supplémentaire à l'utilisation directe de gtk. Si tu compares une app java "compilé en natif" tu auras donc des perfs moins bonnes qu'une app native depuis le début.
Rajoute à cela que le tout n'est pas encore optimisé... et tu devrais finir par te dire que c'est pas si étonnant que ça ;)
[^] # Re: hum
Posté par tene . En réponse à la dépêche Eclipse compilé en natif.. Évalué à 10.
La réponse à cette question est complexe, je vais cependant tenter de te donner quelques points de réponses:
- une JVM, de nos jours, n'est plus si "VM" que ça, c'est surtout un bon JITter, autrement dit ton bytecode devient du code natif, qui n'est donc pas si lent à exécuter que cela. (c'est du .NET, mais Quake2.NET tourne relativement bien, quelques pourcent de diff avec le code natif... optimisé en asm).
- Java (et .NET et tout les beaux langages maheureusement sous utilisé tel que python et ruby) apporte quelques choses que les langages natifs n'ont pratiquement pas: l'introspection. Et eclipse semble en abuser, il faut donc mimer ce comportement en natif, ce qui revient pratiquement à faire une JVM.
- Une version native se base sur les composant natif existant, il faut donc arriver à mapper les classes java aux api native, ce qui n'est pas facile. Et tu te retrouves avec le problème suivant: java utilise swt qui utilise gtk, en natif, tu dois faire le natif qui utilise l'émulation de swt qui utilise gtk... tu as donc des étapes supplémentaire à l'utilisation directe de gtk. Si tu compares une app java "compilé en natif" tu auras donc des perfs moins bonnes qu'une app native depuis le début.
Rajoute à cela que le tout n'est pas encore optimisé... et tu devrais finir par te dire que c'est pas si étonnant que ça ;)