Stack overflow - mehr Speicher?

P

Paul

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.
 
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.

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
 
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
 
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
 
Zurück