Rekursion und StackOverflow

Status
Nicht offen für weitere Antworten.

Scamas

Mitglied
ich implementiere gerade einen rekursiven region growing algorithmus. allerdings wird bereits nach ~5000 offenen methoden aufrufen ein StackOverflowError geworfen. ich habe sowas früher schon mal mit c++ und visual studio gemacht... dort hatte man die möglichkeit einen größeren stack für die applikation zu verwenden. geht das in java auch? bzw. welche möglichkeiten habe ich, um dieses problem zu lösen?

debian linux / java 6 / eclipse
 

Scamas

Mitglied
kommt noch ^^ ... ich implementiere sowohl rekursion als auch iterativ und führe einige vergleiche durch

danke für die schnell antwort
 

Scamas

Mitglied
hmm... auf den ersten blick ganz toll, auf den zweiten hats aber nahezu nichts gebracht... nun sind immerhin schon ~6000 aufrufe nötig bis die exception fliegt... scheinbar ist rekursion im bereich bildverarbeitung mit java nicht optimal/unbrauchbar
 
M

maki

Gast
Rekursion ist Rekursion, egal um was es geht.

Das Rekursion zwar im Code viel aussagen kann ist bekannt, aber auch das die Stackframes begrenzt sind, auf jeder Plattform und Programmiersprache.

Das allseits bekannte Gegenmittel: Iteration anstatt Rekursion.
Läuft auch schneller ;)
 

Marco13

Top Contributor
Ja, du kannst ja auch
java -Xms600m TheProgram
machen, aber irgendwann wird's sinnlos - insbesondere, weil das so klingt, als ob der Speicherplatzbedarf nicht linear, sondern polynomial (oder sogar exponentiell?) ist....
 

Scamas

Mitglied
ich nochmal...

ich habe mittlerweise zwar einen iterativen algorithmus als alternative, jedoch kann ich mir absolut nicht vorstellen, das java bei rekursion derart versagt.

das java kommando -Xms6m bewirkt rein gar nichts in bezug auf eine mögliche rekursionstiefe. der kurzzeitige eindruck dies würde ewas bringen erwies sich recht schnell als falsch.

hab ich irgendwas elementares übersehen?

für weitere ideen bin ich dankbar...
 
S

SlaterB

Gast
warum tust du das so als Quatsch ab, hast du das schon getestet?
also ich kann diese Optionen auch nicht wirklich nachvollziehen,

java -Xss999 läuft bei mir nicht,
java -Xss1000 bis zu 262M läuft, hat aber anscheinend keine Auswirkung auf den Stack,
mit anderen Parametern verschieben sich die Grenzen etwas (z.B. kann ich nachvollziehen, dass bei
-Xmx1024m Xss nur bis 110m geht, wie im anderen Thread angegeben),
ein Sinn oder wenigstens eine Auswirkung ist aber nicht zu erkennen,

mein Programm läuft immer bis x= 5128

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        try
        {
            doSomething(0);
        }
        catch (Throwable t)
        {
            // sonst Spam der Fehlermeldung
        }
    }

    static void doSomething(int x)
    {
        System.out.println("x: " + x);
        doSomething(x + 1);
    }
}
 
M

maki

Gast
Quatsch deswegen, weil die Aussage das "Java keine Rekursion kann" imho nix anderes ist ;)

Nach ein bisschen Nachforschen kam heraus, das Java unter Windows einen "Bug" hat, der dafür sorgt, dass der Xss Parameter nur bei neuen Threads zieht.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4689767

So geht's auch unter Windows:
Code:
package test;

public class RekursionsTest implements Runnable{


	public static void main(String[] args)
	throws Exception
	{
		try
		{    	  
			(new Thread(new RekursionsTest())).start();
		}
		catch (Throwable t)
		{
			System.out.println(t);
		}
	}


	void doSomething(int x)
	{
		System.out.println("x: " + x);
		doSomething(x + 1);
	}

	public void run() {
		doSomething(0);
	}

}
Hab ich bei ca. 1.5 Millionen manuell abgebrochen, da es funzt.
 
M

maki

Gast
Muss zugeben, dass ich mich auch sehr gewundert habe, aber erst als ich es ausprobiert habe... (schäm)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
P Rekursion Aufrufbaum Allgemeine Java-Themen 7
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
Zeppi Rekursion StackOverflowError Allgemeine Java-Themen 4
J Rekursion Allgemeine Java-Themen 4
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
parrot Rekursion Aufgabe Allgemeine Java-Themen 12
B Rekursion Allgemeine Java-Themen 11
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
J Rekursion Mergesort Allgemeine Java-Themen 10
R Rekursion Allgemeine Java-Themen 3
R Programm zur Rekursion Allgemeine Java-Themen 5
V Rekursion Allgemeine Java-Themen 2
J Denkfehler Rekursion Allgemeine Java-Themen 5
I Raute mit Rekursion "zeichnen" Allgemeine Java-Themen 7
B Rekursion Allgemeine Java-Themen 2
B Rekursion Allgemeine Java-Themen 22
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
Hacer Rekursion- sumOfAllNodes Allgemeine Java-Themen 5
L Rekursion Binärbaum Allgemeine Java-Themen 7
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
Y Rekursion Allgemeine Java-Themen 19
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
T Pascalsches Dreieck ohne array und rekursion Allgemeine Java-Themen 9
P Rekursion Allgemeine Java-Themen 9
R Threading und Rekursion führen zu “GC overhead limit exceeded” Allgemeine Java-Themen 4
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
C Rekursion Fibonacci Allgemeine Java-Themen 31
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
eQuest Rekursion Dauer Allgemeine Java-Themen 6
Weiti Swingworker und Rekursion Allgemeine Java-Themen 8
L fragwürdige Rekursion Allgemeine Java-Themen 4
L Kleine Rekursion Allgemeine Java-Themen 12
M Rekursion!! Allgemeine Java-Themen 8
J Rekursion in Schleifenkonstrukt wandeln Allgemeine Java-Themen 21
R Rekursion Ablauflogik Allgemeine Java-Themen 19
M Rückwärts geführte Rekursion Allgemeine Java-Themen 3
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
G Werte bei Rekursion viel höher als erwartet Allgemeine Java-Themen 3
G Rekursion - Denksport Allgemeine Java-Themen 6
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
S Rekursion Allgemeine Java-Themen 2
Linad Tiefe der Rekursion als Abbruchbedingung Allgemeine Java-Themen 6
Linad Zahlensysteme -> Rekursion Allgemeine Java-Themen 4
N Frage zu einer Rekursion Allgemeine Java-Themen 4
D Stackoverflow verhindern Allgemeine Java-Themen 4
K Threads StackOverflow Allgemeine Java-Themen 12
M Eclipse Stackoverflow beim Einlesen von großen Bilder in kd Baum Allgemeine Java-Themen 15
S Binärer Suchbaum Stackoverflow Problem Allgemeine Java-Themen 4
S StackOverflow Allgemeine Java-Themen 7
H StackOverflow Fehler? Allgemeine Java-Themen 3
foobar [groovy]Stackoverflow bei invokeMethod Allgemeine Java-Themen 3
J Warum Stackoverflow oder Nullpointerexeption? Allgemeine Java-Themen 4
S StackOverflow Allgemeine Java-Themen 10
nico3000 Rekusrion mit Stackoverflow Allgemeine Java-Themen 7
0 StackOverflow abfangen Allgemeine Java-Themen 15
I Vector serialisieren: StackOverflow Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben