Le diagnostic de Code Java: Améliorer les Performances de Votre Code Java explique pourquoi la JVM ne prend pas en charge la queue-appel d'optimisation.
Mais bien qu'il est bien connu comment transformer automatiquement une sauvegarde de fonction récursive dans une boucle simple, les spécifications de Java n'exige pas que cette transformation sera faite. Sans doute, la raison pour laquelle il n'est pas une exigence, c'est que, en général, la transformation ne peut pas être fait de manière statique dans un langage orienté-objet. Au lieu de cela, la transformation de la queue-fonction récursive simple boucle doit être fait de façon dynamique par un compilateur JIT.
Il donne ensuite un exemple de code Java qui ne va pas se transformer.
Donc, comme dans l'exemple du Listing 3 montre, nous ne pouvons pas attendre statique compilateurs pour effectuer la transformation de la queue de la récursivité sur du code Java tout en préservant la sémantique de la langue. Au lieu de cela, nous devons compter sur la dynamique de la compilation par le JIT. En fonction de la JVM, le JIT peut ou ne peut pas faire cela.
Puis il donne un test que vous pouvez utiliser pour découvrir si le JIT.
Naturellement, puisque c'est un IBM papier, il comprend un plug:
J'ai exécuté ce programme avec un couple de
le Java Sdk, et les résultats ont été
rien de surprenant. En cours d'exécution sur le Soleil Hotspot
JVM pour la version 1.3 révèle que
Hotspot ne pas effectuer de la
la transformation. Paramètres par défaut
l'espace de pile est épuisée en moins de
qu'une seconde sur ma machine. Sur le
d'autre part, IBM JVM pour la version 1.3
ronronne sans problème,
indiquant qu'il n'a transformer le
le code de cette façon.