Some of the compilers were able to optimise the tail recursion calls, for example Scala does. But till Java 7 tail recursion calls are not optimised by the Java compiler. Will Java 8 compiler is going to generate optimised byte codes for tail recursion?
I did some R&D on Scala and Java 7 compiler and posted my thoughts at Tech.pro
I don't think there's anything in Java's fundamentally OO nature that would prevent it from having tail call optimization. It's just not a particularly high priority, and they've had a lot of other features they wanted to get in.