Frame Instanz löschen

brokerhorst

Grünschnabel
Hallo Leute,

ich erstelle in einer onClick Methode einen Frame...etwa so:

Code:
@Override
public void mouseClicked ( final MouseEvent arg0 ) {
	 if (arg0.getClickCount () == 2) {
		ResultView rv = new ResultView();
		rv.setVisible(true);
	 }
}

wenn ich jetzt den Frame schließe, erkennt dann der gc, dass er die Instanz löschen kann oder muss ich da noch was machen?...weil wenn die onClick Methode fertig ist, is die Instanz ja noch da...sonst würd ich ja das fenster nicht sehen...deshalb frage ich mich, ob ich mir so nach und nach den speicher vollmülle.
ich will das man bei mehreren klicks mehrere Fenster aufmachen kann, deshalb hab ich keine globale instanz für den frame angelegt.

lg
Andre
 
Hi und Willkommen bei Tutorials.de,

damit dein Fenster vom GC gelöscht wird, musst du meines Erachtens nach nur folgendes machen:
Java:
rv.dispose();

Gruß

Fabio
 
Damit eine Referenz für den gc überhaupt zur Löschung in Frage kommt, muss dieser der Wert null zugewiesen werden. Ist das geschehen kann es sein, dass der gc die Instanz löscht. Eine Garantie, dass der gc gestartet wird hat man nicht, und selbst dann hat man keine Garantie, dass besagte Objekte abgeräumt werden. Fazit: Man darf sich nie darauf verlassen, dass der gc etwas tut.
 
Der GC ist so angelegt das er in regelmäßigen Abständen durch den HEAP läuft und alle Objekte auf welche es KEINE Referenz mehr gibt finalisiert in dem Object.finalize() aufgerufen wird. In der Regel wird durch diese Methode das Objekt aufgeräumt so das alle von diesem Objekt gehaltenen Referenzen entfernt werden und das Objekt nun also komplett frei von jeglichen Zugriffen ist ... so bald das der Fall ist sollte das Objekt im aktuellen oder nächsten Durchlauf des GC aus dem HEAP entfernt werden.
Sollte es aber irgendwo noch einen Referenz geben ... egal ob auf das Objekt selbst oder vom Objekt auf ein anderes wird dieses NICHT freigeben.

Bei allem was von java.awt.Window erbt sollte es ein dispose() tun ... vorrausgesetzt das man alle Referenzen auf NULL setzt ... *die Java-internen Referenzen werden durch das dispose() aufgeräumt. Ob das Objekt dann allerdings wirklich frei ist kann nicht garantiert werden.
 
@SpiKEe: "Der GC ist so angelegt ... ". Es gibt mehrere JVM und die implementieren die vage Spezifikation des GC unterschiedlich. Von welcher JVM sprichst Du?
 
Was für ne Frage ... natürlich von der Sun/Oracle VM ...
Mir ist schon bewusst das es mehr als nur diese eine VM gibt ... und das auch alle den GC unterschiedlich implementieren ... aber da TO selbst keine VM spezifiziert hat gehe ich nunmal davon aus das er die Sun/Oracle VM verwendet.

Dessweitern sollte jede andere VM eine änliche Imlementierung aufweisen um die Grundfunktionalität des GC zu gewährleisten ... denn so viel anderst dürfte es in andere VM auch nicht sein.
 
@genode
OT : OMNOMNOM ... ja ... weis ich doch xD ... Aber im groben und ganzen ist das die grundlegende Funktionsweise des GC. Wie genau und mit welchen feinheiten da gearbeitet wird würde um eine vollständige Erklärung zu posten den Rahmen dieses Forums sprengen ... da sollte man sich doch lieber bei den VM-Devs dierekt erkundigen.
 
Zurück