Je ne connais pas les raisons réelles, n'étant pas impliqué de quelque manière que ce soit dans l'implémentation de la JVM, mais je peux penser à quelques raisons plausibles :
- L'idée de Java est d'être un langage qui s'écrit une fois et s'exécute partout, et mettre du matériel précompilé dans le fichier de classe est en quelque sorte une violation de cela (seulement "en quelque sorte" parce que bien sûr le code d'octet réel serait toujours là).
- Cela augmenterait la taille des fichiers de classe parce que vous auriez le même code plusieurs fois, surtout si vous exécutez le même programme sous plusieurs JVM différentes (ce qui n'est pas vraiment rare, si vous considérez les différentes versions comme des JVM différentes, ce que vous devez vraiment faire).
- Les fichiers de classe eux-mêmes peuvent ne pas être accessibles en écriture (bien qu'il soit assez facile de le vérifier).
- Les optimisations de la JVM sont partiellement basées sur des informations d'exécution et sur d'autres exécutions, elles pourraient ne pas être aussi applicables (bien qu'elles devraient toujours fournir un certain avantage).
Mais je suis vraiment en train de deviner, et comme vous pouvez le voir, je ne pense pas vraiment qu'aucune de mes raisons soit un obstacle réel. Je pense que Sun ne considère tout simplement pas ce support comme une priorité, et peut-être que ma première raison est proche de la vérité, car faire cela de manière habituelle pourrait aussi amener les gens à penser que les fichiers de classe Java ont vraiment besoin d'une version séparée pour chaque VM au lieu d'être multiplateforme.
Ma préférence irait en fait à un traducteur bytecode-natif distinct que vous pourriez utiliser pour faire quelque chose comme ça explicitement à l'avance, en créant des fichiers de classe qui sont explicitement construits pour une VM spécifique, avec éventuellement le bytecode d'origine en eux afin que vous puissiez fonctionner avec différentes VM aussi. Mais cela vient probablement de mon expérience : J'ai surtout travaillé sur Java ME, où le compilateur Java n'est pas plus intelligent pour la compilation.
4 votes
Un fil de discussion sur ce problème : javalobby.org/forums/thread.jspa?threadID=15812
2 votes
Mais il est peu probable que cette question reçoive une réponse définitive.
1 votes
Je ne suis pas sûr qu'il s'agisse d'un coup de pouce "significatif", car il faudrait alors charger les éléments JIT depuis le disque au lieu de les JITer en mémoire. Cela pourrait accélérer les choses, mais au cas par cas.
1 votes
Merci à tous pour vos réponses ! Toutes les réponses étaient également valables, alors j'ai suivi la communauté sur ce point...
0 votes
C'est une bonne question si vous voulez mon avis :)
0 votes
La prise en charge initiale des génériques est en cours d'ajout dans Java 9.
1 votes
@Nfff3 Jetez un coup d'œil à cette réponse