Callstacktiefe

Gibt es eigentlich eine Begrenzung in Java wie viele Funktionen aufgerufen werden dürfen?

Ich kann mich erinnern mal ein Quicksort (rekursiv) auf einen grossen Datenbestand gemacht zu haben, was irgendwie abbrach. Nun möchte ich für eine Studienarbeit Algorithmen visualisieren, wobei hier auch Rekursion und dazwischen zig andere Aufrufe, also unter Umständen mehrere Tausend Funktionsaufrufe benutzt werden. Gibt das dann irgendwann ein Problem und wenn ja wann? :smile:

Gruß
Bruno

Gibt es eigentlich eine Begrenzung in Java wie viele
Funktionen aufgerufen werden dürfen?

Rekursive Aufrufe sind generell und in allen Sprachen durch den Stack begrenzt. Wenn der voll ist mit lokalen Variablen, Rücksprungadressen, usw., dann muss das Programm zwangsläufig abbrechen.

Im SUN-JDK kannst du zumindest die Heap-Größe über die -X… Parameter setzen (siehe „java -X“), ob das aber Auswirkungen auf den Stack hat, kann ich dir gerade nicht sagen. Bei IBMs JDK geht das auch, aber auch da bin ich mir bezüglich des Stacks nicht sicher.

Generell kann es bei sehr hohen Rekursionstiefen ohnehin nicht schaden, mal darüber nachzudenken, ob sich das Ganze nicht auch iterativ programmieren lässt, meistens ist das schneller und nur selten wirklich komplizierter (Theo-Infs mögen mir diese Ausdrucksweise verzeihen).
Quicksort ist z.B. relativ leicht iterativ umzusetzen.

Notfalls solltest du auch darauf achten, in rekursiven Funktionen nicht zu viele lokale Variablen und Parameter zu benutzen, bzw. erstere lokal zu begrenzen.

Stefan :smile: