Java Kodunu Teşhis Etme: Java Kodunuzun Performansını İyileştirme ( alt ), JVM'nin neden kuyruk arama optimizasyonunu desteklemediğini açıklar.
Ancak, bir kuyruk özyinelemeli işlevin otomatik olarak basit bir döngüye nasıl dönüştürüleceği iyi bilinmesine rağmen, Java belirtimi bu dönüşümün yapılmasını gerektirmez. Muhtemelen, bunun bir gereklilik olmamasının bir nedeni, genel olarak dönüşümün nesne yönelimli bir dilde statik olarak yapılamamasıdır. Bunun yerine, kuyruk özyinelemeli işlevden basit döngüye dönüşüm, bir JIT derleyicisi tarafından dinamik olarak yapılmalıdır.
Daha sonra dönüşmeyecek bir Java kodu örneği verir.
Bu nedenle, Liste 3'teki örneğin gösterdiği gibi, statik derleyicilerin dilin anlamını korurken Java kodunda kuyruk özyinelemesinin dönüşümünü gerçekleştirmesini bekleyemeyiz. Bunun yerine, JIT'in dinamik derlemesine güvenmeliyiz. JVM'ye bağlı olarak, JIT bunu yapabilir veya yapmayabilir.
Ardından, JIT'inizin bunu yapıp yapmadığını anlamak için kullanabileceğiniz bir test verir.
Doğal olarak, bu bir IBM kağıdı olduğu için bir fiş içerir:
Bu programı birkaç Java SDK ile çalıştırdım ve sonuçlar şaşırtıcıydı. Sun'ın 1.3 sürümü için Hotspot JVM'sini çalıştırmak, Hotspot'un dönüşümü gerçekleştirmediğini ortaya koyuyor. Varsayılan ayarlarda, yığın alanı makinemde bir saniyeden daha kısa sürede tükeniyor. Öte yandan, IBM'in 1.3 sürümü için JVM'si, kodu bu şekilde dönüştürdüğünü göstererek sorunsuz bir şekilde devam ediyor.