# Stack overflow - mehr Speicher?



## Paul (26. November 2009)

Hallo,

Ich habe in einem Programm an welchem ich gerade arbeite ab einer bestimmten Größe einen Stack overflow. 
Erklärung zum Programm: im Wesentlichen wichtig zu wissen ist, dass es eine Rekursion über eine Matrix ist. Die Matrix ist in der Größe zu beginn einstellbar. 
Das Funktioniert soweit ganz gut, bis ich eben eine bestimmte Größe erreiche. Es wundert mich nich wirklich das bei ca. 2000 rekursionstiefen das Programm keine Lust mehr hat.

Was mich nun interessiert: kann ich das Programm dazu bewegen das es tiefer in die Rekursion geht indem ich den Speicher erhöhe und wenn ja, wie kann ich das tun (möglichst so das ich nur auf die .jar file doppelklicken kann zum ausführen). Oder gibt es bei solch großen Rekursionen ganz andere Probleme?


Schonmal Danke für eure Bemühungen.


----------



## mccae (26. November 2009)

Paul hat gesagt.:


> Hallo,
> 
> Ich habe in einem Programm an welchem ich gerade arbeite ab einer bestimmten Größe einen Stack overflow.
> Erklärung zum Programm: im Wesentlichen wichtig zu wissen ist, dass es eine Rekursion über eine Matrix ist. Die Matrix ist in der Größe zu beginn einstellbar.
> ...



Huhu,

Bei einer solchen Rekursionstiefe sollte man meiner Meinung nach nicht zu Rekursionen greifen. Sind zwar schnell, fressen jedoch allgemein Speicher...

Wenn du willst, kannst du mit dem JVM Parameter -Xss die Stackgröße definieren.
Zum Beispiel auf 8MB: -Xss8m

Weiters solltest du deinen Code auf Fehler prüfen (ob die Rekursion auch returnt).

Mfg
Martin Conrad Caesar


----------



## Paul (26. November 2009)

Also bei kleineren Matrizen returnd die Funktion vernünftig. Da gibt es ja auch zufriedenstellende Ergebnise.

War es nicht so das das -Xss vor den Programmaufruf geschrieben werden musste? 
Also z.B. java -Xss100m Rekursion?
Ist das die einzige Möglichkeit die Stackgröße zu ändern/definieren?

MfG
Paul


----------



## Thomas Darimont (26. November 2009)

Hallo,

entweder musst du wie mccae schon gesagt hat mit -Xss (bspw. -Xss1024k) ändern oder deinen Algorithmus anpassen (bspw. könntest du deinen Algorithmus iterativ formulieren).

Ich weis zwar nicht was du genau machst aber viele Berechnungen über Matrizen lassen sich gut partitionieren und parallelisieren.

Sonst wüsste ich keinen Weg wie man die Thread-Stack -größe noch ändern könnte (ohne einen eigenen Launcher schreiben zu müssen).


Gruß Tom


----------

