hallo,
ich habe das Problem, dass mein Programm mit dem Fehler "OutOfMemory" abgestürzt ist. Daraufhin habe ich mir einzelne Fragmente gebastelt, um zu sehen, wo mein Fehler im Genauen liegt.
Zur Unterstützung läuft ein Profiler im Hintergrund mit, der mit den aktuellen Heapstand mitteilt.
Jetzt ist es so, dass ich aus meinem Programm einen Editor aufrufe. Dieser wird in einem zum Hauptframe modalen Fenster angezeigt.
Um Malen zu können etc. werden Graphics2D Objekte, BufferedImages und Images erstellt bzw. geladen.
Diese kosten natürlich viel Speicher, wodurch der Heap im Profiler eindeutig ansteigt, sobald ich den Editor öffne. Nach Schließen des Editors fällt der Heap allerdings nicht ab, sondern er steigt immerweiter an je öffter ich den Editor öffne und schließe.
Nach etwas 10mal öffnen und schließen, fällt der Heap mal um 5MB, nachdem er zuvor um 20MB angestiegen ist.
Jetzt dachte ich natürlich, dass im Programm noch Referenzen vorhanden sind, so dass der GC diese nicht einsammelt.
Komischerweise habe ich dann aber mal den GC aus dem Profiler heraus aufgerufen und auf einmal fällt der Heap von ca. 34MB auf 14MB. Öffne ich dann aber wieder den Editor steigt der Heap erst um 11MB, dann wieder langsam um 3-4MB an.
Das alles erscheint mir sehr seltsam, da ich eigentlich nach jedem dialog.dispose() jegliche Objekte und Referenzen vom GC einsammlen lassen will.
Natürlich übernimmt die VM diese Kontrolle, nur sollte dann doch wenigstens zu einem späteren Zeitpunkt alles geleert werden.
Kann es vielleicht sein, dass die Objekte zu schnell in den alten Teil von Eden kommen, so dass der GC diese nicht mehr auf Anhieb findet und zu sehr damit beschäftigt ist, die neuesten Elemente zu löschen?
Komisch ist wie gesagt auch, dass der GC-Aufruf aus dem Profiler zu 100% passt. Genauso sollte es auch aus dem Programm heraus passieren.
Wenn jemand in irgendeiner Weise mein Problem kennt oder weiß woran mein Scheitern im Moment liegt, dann postet doch bitte...
Ich danke euch vielmals
ich habe das Problem, dass mein Programm mit dem Fehler "OutOfMemory" abgestürzt ist. Daraufhin habe ich mir einzelne Fragmente gebastelt, um zu sehen, wo mein Fehler im Genauen liegt.
Zur Unterstützung läuft ein Profiler im Hintergrund mit, der mit den aktuellen Heapstand mitteilt.
Jetzt ist es so, dass ich aus meinem Programm einen Editor aufrufe. Dieser wird in einem zum Hauptframe modalen Fenster angezeigt.
Um Malen zu können etc. werden Graphics2D Objekte, BufferedImages und Images erstellt bzw. geladen.
Diese kosten natürlich viel Speicher, wodurch der Heap im Profiler eindeutig ansteigt, sobald ich den Editor öffne. Nach Schließen des Editors fällt der Heap allerdings nicht ab, sondern er steigt immerweiter an je öffter ich den Editor öffne und schließe.
Nach etwas 10mal öffnen und schließen, fällt der Heap mal um 5MB, nachdem er zuvor um 20MB angestiegen ist.
Jetzt dachte ich natürlich, dass im Programm noch Referenzen vorhanden sind, so dass der GC diese nicht einsammelt.
Komischerweise habe ich dann aber mal den GC aus dem Profiler heraus aufgerufen und auf einmal fällt der Heap von ca. 34MB auf 14MB. Öffne ich dann aber wieder den Editor steigt der Heap erst um 11MB, dann wieder langsam um 3-4MB an.
Das alles erscheint mir sehr seltsam, da ich eigentlich nach jedem dialog.dispose() jegliche Objekte und Referenzen vom GC einsammlen lassen will.
Natürlich übernimmt die VM diese Kontrolle, nur sollte dann doch wenigstens zu einem späteren Zeitpunkt alles geleert werden.
Kann es vielleicht sein, dass die Objekte zu schnell in den alten Teil von Eden kommen, so dass der GC diese nicht mehr auf Anhieb findet und zu sehr damit beschäftigt ist, die neuesten Elemente zu löschen?
Komisch ist wie gesagt auch, dass der GC-Aufruf aus dem Profiler zu 100% passt. Genauso sollte es auch aus dem Programm heraus passieren.
Wenn jemand in irgendeiner Weise mein Problem kennt oder weiß woran mein Scheitern im Moment liegt, dann postet doch bitte...
Ich danke euch vielmals