O java suporta e otimiza chamadas recursivas de cauda?
Digamos que eu tenho uma função recursiva que é recursiva na cauda.
System.out.println( sum(Arrays.asList(0, 1, 2, 3, 4, 5)) );
int sum(List<Integer> integers) {
if (integers.isEmpty())
return 0;
else
return integers.get(0) + sum(integers.subList(1, integers.size()));
}
Gostaria de saber se esta funçãosum
crescerá na pilha ou será alterado para um loop (já que é uma função recursiva da cauda)?
Acabei de ler que o Scala detecta essas chamadas e a otimiza, mas isso é apenas uma coisa do Scala ou JVM em geral?