Czy Java obsługuje i optymalizuje połączenia rekurencyjne?

Powiedz, że mam funkcję rekurencyjną, która jest rekurencyjna.

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()));
}

Zastanawiam się, czy ta funkcjasum będzie rosnąć na stosie lub czy zostanie zmieniony na pętlę (ponieważ jest to funkcja rekurencyjna)?

Właśnie przeczytałem, że Scala wykrywa takie połączenia i optymalizuje je, ale czy jest to rzecz wyłącznie Scala czy JVM w ogóle?

questionAnswers(2)

yourAnswerToTheQuestion