Hallo Leute,
da ist so ein Programmteil, welches eine Thread-Flut erzeugt. Diese kicken je eine Funktion mit je einem bestimmten Parameter an und sollen dann von der Bildfläche verschwinden.
Soweit tun sie das auch, aber nach getaner Arbeit sind sie ziemlich zählebig.
Bei der Erzeugung von 400-1000 Threads verschwinden sie noch ziemlich schnell aus der ThreadGroup (>50Stück /100ms), aber bei 5000 verdrücken sich nur laaaangsam (3-8/100ms).
Laaangsam heisst, sie lümmeln gut doppelt so lange herum, wie sie für die Arbeit brauchten. Ich brauche den Speicher aber für was anderes!
Der System-Monitor vom Betriebssystem zeigt in etwa dieselbe Bevölkerung an wie die Überwachung der Gruppe.
Es bringt nichts, die Dinger auf null zu setzen, beim Abfragen der ThreadGroup ist da immer noch Hochbetrieb drin.
Es bringt nichts, zusätzlich die GC aufzurufen.
Thread.stop hat ebenfalls keinen Einfluß auf das Benehmen.
Thread.destroy ist nicht vorhanden.
Code:
Code:
int i,i0=0,blocksize=100;
while(i0<symax)
{ try
{ for (i=0; i<blocksize; i++)
{ final int ii=i+i0;
if (ii<symax)
{ Thread t=new Thread(tg,"zeile"+ii) { @Override public void run() { mach_zeile(ii); }; };
t.start();
}
}
i0=i0+blocksize;
}
catch(OutOfMemoryError e) { break; }
}
und
Code:
synchronized void mach_zeile(int zz)
{ double douzi=pot1min+zz*dzy;
double douci=pot2min+zz*dcy;
for (int ix=0; ix<sxmax; ix++)
{ gb.setColor(mycolor.get_color(ju.get_slope(kin1min+ix*dzx,douzi,kin2min+ix*dcx,douci)));
gb.drawRect(ix,zz,1,1);
Thread.yield(); // sonst blockiert GUI
}
}
Hat jemand noch ein paar Tricks?
Gruß,
Ulrike
Lesezeichen