5

Ich erhalte eine StackOverflowException auf dieser Java-Methode:Ich bekomme eine StackOverFlowException für diesen Code, weil meine JVM keine Tail Call Optimierung unterstützt, richtig?

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

ich mit Endaufruf Rekursion spielen bin so dass ich denke, das ist das, was passiert, wenn die JVM den Stapel rechts nicht Kurzschluss tut?

Antwort

1

Ich habe eine reference of tail recursion in Java gefunden, daher würde ich das überprüfen (später wenn ich Zeit habe).

Obwohl es extrem ineffiecent für Ihren Anwendungsfall wäre.

+0

Ich glaube nicht, dass das Dokument viel hinzufügt ... der Verweis auf Tail-Rekursion erwähnt nicht, ob die Stack-Referenzen sind weg optimiert – Eddy

3

Ja, Schwanz Call-Optimierung wird derzeit nicht von der JVM unterstützt, da des Sicherheitsmodell und die Notwendigkeit, immer ein Stack-Trace zur Verfügung zu haben, in diesem Beispiel leicht umgeschrieben werden kann, obwohl mit Iteration.

+0

Hallo, natürlich kann es sein leicht ausgedrückt mit einer for-Schleife ... es ist doch eine Übung;) – Eddy