Tail Call Optimisation in Java

Why can't Java use the same approach ?

I can't say which approach will be used, but it's better-explained in Project Loom's proposal:

As adding the ability to manipulate call stacks to the JVM will undoubtedly be required, it is also the goal of this project to add an even lighter-weight construct that will allow unwinding the stack to some point and then invoke a method with given arguments (basically, a generalization of efficient tail-calls). We will call that feature unwind-and-invoke, or UAI. It is not the goal of this project to add an automatic tail-call optimization to the JVM.

As far as I've heard, work has not yet begun on tail calls, as Fibers and Continuations seem to currently be a higher priority.


I read a very nice blog post here about how to achieve tail recursion in Java: Knoldus blog post on Java tail recursion

However, the code on their blog doesn't compile so I created a small repo with their code but fixed the syntax so it compiles. Github repo with working code

Hope this is useful to someone, I found the ideas presented at the Knoldus blog post very interesting.

EDIT: actually I found out later that the ideas presented in the blog post are originally Venkat Subramaniam's. He discusses these subjects in his talk here.