5

me siento un StackOverflowException en este método Java:Obtengo una StackOverFlowException en este código porque mi JVM no es compatible con la optimización de llamadas de cola, ¿verdad?

private static final Integer[] populate(final Integer[] array, final int length, final int current) { 

    if (current == length) { 
     return array; 
    } else { 
     array[current] = TR.random.nextInt(); 
     System.out.println(array[current]); 
     return populate(array, length, current + 1); 
    } 
} 

estoy jugando con la cola llamada recursividad así que supongo que esto es lo que sucede cuando la JVM no cortocircuito el derecho de pila?

Respuesta

7

Ninguna JVM que conozco admite la optimización de la cola de cola. Esto no es un descuido Aparentemente, esta optimización tiene consecuencias significativas para la reflexión de Java y los administradores de seguridad de Java.

Referencias:

1

Encontré un reference of tail recursion en java, por lo tanto, comprobaría esto, (más tarde cuando tenga tiempo).

Aunque sería extremadamente ineficaz para su caso de uso.

+0

No creo que el documento agregue mucho ... la referencia a la recursividad de la cola no menciona si las referencias de la pila están optimizadas – Eddy

3

Sí, la cola de llamadas Optimización actualmente no está soportado por la JVM debido al modelo de seguridad y la necesidad de tener siempre un seguimiento de pila disponible, este ejemplo podría ser fácilmente volver a escribir utilizando iteración sin embargo.

+0

Hola, por supuesto puede ser fácilmente expresado con un bucle for ... es un ejercicio después de todo;) – Eddy

Cuestiones relacionadas