Ich schreibe ein Testprogramm wie folgt:
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".
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
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
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,
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
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.
Tags und Links java memory-leaks memory swing jframe