Threading und Rekursion führen zu “GC overhead limit exceeded”

R

Rolf46

Gast
Hallo!

Ich habe den Fastcut Algorithmus zur berechnung des minimalen Schnitts in Graphen implementiert.
Um meine 4cores auszunutzen hab ich dies auf Threads verteilt.

Das problem ist folgendes:
Ich habe einen Startthread, welcher Den Ausgangsgraphen zwei mal jeweils um x-Kanten reduziert.
Damit erhält man zwei neue Graphen H1,H2.

Diese gebe ich als Input in 2 neue Threads und lasse diese stehts rekusiv so weiter rechnen, bis der Graph nur noch 2Knoten besitzt.
Anschließend werden immer die beiden letzten Graphen verglichen und der kleinere Schnitt zurückgegeben...

Das Problem ist dass die Threadmenge quadratisch ansteigt und ich nach einer Weile einen “GC overhead limit exceeded” error bekomme...
Ich habe auch schon in der eclipse.ini die Werte geändert:

-Xms8000m
-Xmx8000m
--launcher.XXMaxPermSize
8000m
--launcher.XXMaxPermSize
8000M

Das bringt leider auch nichts...

Hat jemand einen Rat?



Hier einmal der Code der runmethode des Threads
Java:
public void run() {
		int n = G.getVertexCount();
		UndirectedSparseMultigraph<Integer, Double> H1;
		UndirectedSparseMultigraph<Integer, Double> H2;

		if (n == 2) {
			Contract contract1 = new Contract(G, 2);
			contract1.calcMinCut();
			mincut = G.getEdges();
		} else {
			try {
				double t = n / sqrtTwo;
				UndirectedSparseMultigraph<Integer, Double> G2 = (UndirectedSparseMultigraph<Integer, Double>) DeepCopy.copy(G);
				Contract contract1 = new Contract(G, t);
				Thread t1 = new Thread(contract1);
				t1.setPriority(Thread.MAX_PRIORITY);
				t1.start();

				Contract contract2 = new Contract(G2, t);
				Thread t2 = new Thread(contract2);
				t2.setPriority(Thread.MAX_PRIORITY);
				t2.start();

				t1.join();
				t2.join();

				H1 = contract1.G;
				H2 = contract2.G;
				
				FastCut fc1 = new FastCut(H1, t);
				Thread fcT1 = new Thread(fc1);
				fcT1.start();

				FastCut fc2 = new FastCut(H2, t);
				Thread fcT2 = new Thread(fc2);
				fcT2.start();

                                //Lege thread schlafen bis Rekusrion fertig ist
				fcT1.join();
				fcT2.join();

                                //vergleich beide Ergebnisse und nehme kleineren Schnitt
				mincut = fc1.mincut.size() < fc2.mincut.size() ? fc1.mincut : fc2.mincut;

			} catch (Exception e) {
				System.out.println(e);
			}
		}
	}
 
M

maki

Gast
Solltest mal diese oder ähnliche Werte für die Run Configuration einsetzen, eclipse.ini bezieht sich auf Eclipse selber.
 

Empire Phoenix

Top Contributor
Ich empfehle mal einen ThreadPool(executor) de maximal doppeltsoviele Threads wie cores(aka Hyperthreading) hat.
-> Kein quadratischer ansteig der Threads mehr, und geringerer Overhead
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tarrew Threading - Unregelmäßige Lock-Vergabe Allgemeine Java-Themen 0
Thallius Ist Background-Threading in Java wirklich so schwer? Allgemeine Java-Themen 7
C Threading mit BufferedReader/InputStream & sockets Allgemeine Java-Themen 0
B Threading Allgemeine Java-Themen 23
Luk10 Multi-Threading mit join() Allgemeine Java-Themen 16
SuperSeppel13 Bilder auf Anfrage laden - Threading Allgemeine Java-Themen 3
J Threading / Callables Allgemeine Java-Themen 8
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
F Threading oder kein Threading - das ist hier die Frage. Allgemeine Java-Themen 23
G Fehlerbereinigung bei Multi Threading Anwedung Allgemeine Java-Themen 2
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
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
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
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
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
D 'InputStreamReader' & 'BufferedReader' führen zu "cannot find symbol"-Fehler Allgemeine Java-Themen 3
G eigene uhrzeit in einer java applikation führen Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben