Führt die Entsorgung eines JFrames zu Speicherverlusten?

8

Ich schreibe ein Testprogramm wie folgt:

  1. Wenn ein Benutzer auf die Schaltfläche A klickt, werden 50 JFrames geöffnet.
  2. Wenn der Benutzer auf die Schaltfläche B klickt, werden alle JFrames angezeigt, die durch Klicken auf die Schaltfläche A angezeigt werden.

Ich finde, dass der Speicher nach dem Klicken auf Button B nicht abnimmt. Ich habe dies mit dem Task-Manager festgestellt, ctrl + alt + del in Windows und überprüfen Sie die Speichernutzung von "Java".

    
Bear 11.09.2011, 07:53
quelle

3 Antworten

11

Das ist richtig, auf keinen Fall, nicht in der Lage, das zu lösen (nicht nur in Java PL),

1) Erstellen Sie wirklich nicht viele Container der obersten Ebene auf Runtime / Fly, weil sie nie finalisiert werden, und bis die aktuelle JVM-Instanz beendet wird und diese Objekte niemals nur ihre Grapfics2D

als GC's erhalten haben

2) myContainer#dispose() on Runtime ist für die aktuelle JVM-Instanz gleich, da myContainer#setVisible(false) in Verbindungen mit JVM verfügbar ist und Speicher

verwendet

3) Erstellen Sie nur wenige Top-Level Containers (Maximum gleichzeitig angezeigt), verwenden Sie das, aber setzen Sie JPanel als 1.st JComponent und rufe myPanel#removeAll() auf, sonst wirst du RootPane und von deinem Container bleibt nur Borders :-) wäre durchscheinend

4) teilweise ist es möglich, JVM verwendeten Speicher durch Aufruf GC zu reduzieren, aber rettet nur Betrag von Graphics2D und Garbage funktioniert nicht sofort,

5) mehr hier nützliche Informationen hier

    
mKorbel 11.09.2011, 08:12
quelle
2

Ohne irgendeinen Code können wir dir nicht viel helfen ... nennst du jFrame. dispose () ?

  

public void dispose ()

     

Gibt alle nativen Bildschirmressourcen frei, die verwendet wurden   durch dieses Fenster, seine Unterkomponenten und alle seine eigenen Kinder. Das   Ist, werden die Ressourcen für diese Komponenten zerstört, jeder Speicher   sie verbrauchen werden an das Betriebssystem zurückgegeben, und sie werden als markiert   nicht darstellbar.

Weitere Informationen finden Sie hier

    
npinti 11.09.2011 08:11
quelle
0

Wenn es einen starken Verweis auf den GC (Garbage Collector) -Stamm aus Ihrem Frame gibt, werden beim Aufrufen der dispose-Methode keine Garbage Collections gesammelt, sodass Sie nach dem Entfernen aller Frames keine Speicheränderungen sehen können . Wenn Sie Speicher benötigen, von Sachen, die Sie freigeben sollten, dann müssen Sie die Frames sammeln.

    
user3573992 21.07.2016 06:48
quelle