Hi,
ich habe folgendes Konstrukt:
Eine Klasse MainFrame extends JFrame (Diese ist nicht static). In dieser habe ich eine Property
welche eine selbst erstelle Klasse zeigt. Mit
wird diese Property nun intialisiert und gefüllt. Danach benötigt diese Property mal locker 400MB Speicher.
Soweit so gut.
Nun übergebe ich diese Property an einen SwingWorker Thread, lese dort Daten daraus und wenn der SwingWorker fertig ist, dann setzte ich im MainFrame
die Liste explizit wieder auf null. Damit sollte der Speicher ja eigentlich wieder zur Verfügung stehen. Trotzdem zeigt mir der Eclipse Memory Analyzer diesen Speicher als Leak an.
Warum?
Erzeuge ich die imageList erst im Worker selber und gebe sie dort auch wieder frei, dann wird kein Leak angezeigt. Ist ja auch logisch, da der Worker Thread nachdem er seine Arbeit getan hat wieder gekillt wird. Allerdings dauert das Erstellen der Liste eine Weile und ich brauche diese nicht nur in einem Worker Thread sondern in zwei. Daher wollte ich die Liste quasi vorher erstellen und nachher freigeben um sie nur einmal erstellen zu müssen.
Scheint aber so nicht zu klappen.
Gruß
Claus
ich habe folgendes Konstrukt:
Eine Klasse MainFrame extends JFrame (Diese ist nicht static). In dieser habe ich eine Property
Java:
MyImageList imageList
welche eine selbst erstelle Klasse zeigt. Mit
Java:
this.imageList= new MyImageList();
imageList.Load();
wird diese Property nun intialisiert und gefüllt. Danach benötigt diese Property mal locker 400MB Speicher.
Soweit so gut.
Nun übergebe ich diese Property an einen SwingWorker Thread, lese dort Daten daraus und wenn der SwingWorker fertig ist, dann setzte ich im MainFrame
Java:
this.imageList=null;
die Liste explizit wieder auf null. Damit sollte der Speicher ja eigentlich wieder zur Verfügung stehen. Trotzdem zeigt mir der Eclipse Memory Analyzer diesen Speicher als Leak an.
Warum?
Erzeuge ich die imageList erst im Worker selber und gebe sie dort auch wieder frei, dann wird kein Leak angezeigt. Ist ja auch logisch, da der Worker Thread nachdem er seine Arbeit getan hat wieder gekillt wird. Allerdings dauert das Erstellen der Liste eine Weile und ich brauche diese nicht nur in einem Worker Thread sondern in zwei. Daher wollte ich die Liste quasi vorher erstellen und nachher freigeben um sie nur einmal erstellen zu müssen.
Scheint aber so nicht zu klappen.
Gruß
Claus