PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: OutOfMemory



bischi
09-07-2006, 18:22
Hab gerade ein Problem, kenne die Ursache, aber nicht die Lösung:

Ich lade mittels der Image-Klasse mehrmals hintereinander ein Bild, welches eher gross ist und nachher skaliert wird. Es wird immer nur ein Bild gebraucht.

Nach ein paar Bildern kommt bei mir immer die Fehlermeldung:


Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space

Das ganze ist ansich nicht weiter schlimm (mit Ausnahme, dass danach jedes mal der garbage-collector das ganze Programm ausbremst). Wenn ich den garbage-collector vor dem Laden des neuen Bildes aufrufe, verschwindet der Fehler, das Programm wird allerdings unnötig langsam...


System.gc();

Nach dem Laden den gc aufzurufen funktioniert komischerweise nicht richtig.

Die Idee wäre jetzt, jeweils nur den Speicher vom Bild freizugeben, ein


Image.flush()

bringt allerdings nicht die erwünschte Lösung. Auch das Heraufsetzen des Heaps löst das Problem nicht.

Darum meine Frage: Kann ich in Java nur den Speicher eines Objektes freigeben?

MfG Bischi

bischi
09-07-2006, 20:06
Hab den Bug gefunden: Nachdem der Ladevorgang eines Bildes mittels eines MediaTrackers überwacht wurde (mt.addImage(pic)) muss es danach wieder entfernt werden:



mt.addImage(image, 0);
try {
mt.waitForAll();
} catch (InterruptedException e) {}
mt.removeImage(image);


MfG Bischi

falke2203
08-08-2006, 12:46
...ansonsten kannst du mit dem CL-Parameter -Xmx000M die maximale Größe des von der VM verwendeten Speichers einstellen, wobei 000 natürlich mit einer entsprechenden Zahl substituiert werden muss.

[edit] wobei eine speicherschonende Implementierung (wie du gemacht hast) auf jeden Fall zu bevorzugen ist

bischi
08-08-2006, 16:23
[edit] wobei eine speicherschonende Implementierung (wie du gemacht hast) auf jeden Fall zu bevorzugen ist

Naja - Bildverwaltungsprogramm, das bei jedem neuen Bild weitere 10 Mega Arbeitsspeicher verbraucht (jetzt kannst du dir überlegen, wieviele Bilder du maximal (nacheinander) anzeigen kannst :D )

MfG Bischi