tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Fabio Hellmann
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
591
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    brokerhorst brokerhorst ist offline Grünschnabel
    Registriert seit
    Oct 2011
    Beiträge
    1
    Hallo Leute,

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

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    @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
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi und Willkommen bei Tutorials.de,

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

    Gruß

    Fabio
    brokerhorst bedankt sich. 
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    Avatar von j2se
    j2se j2se ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    94
    Blog-Einträge
    1
    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.
     

  4. #4
    SE Tutorials.de Gastzugang
    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.
     

  5. #5
    Avatar von j2se
    j2se j2se ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    94
    Blog-Einträge
    1
    @SpiKEe: "Der GC ist so angelegt ... ". Es gibt mehrere JVM und die implementieren die vage Spezifikation des GC unterschiedlich. Von welcher JVM sprichst Du?
     

  6. #6
    SE Tutorials.de Gastzugang
    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.
     

  7. #7
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Nein. Sogar in der Sun/Oracle VM gibt es verschiedene GC-Implementierungen, die du über Parameter verändern/auswählen kannst. siehe auch http://www.tutorials.de/java/381570-...m-instanz.html
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  8. #8
    SE Tutorials.de Gastzugang
    @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.
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 13.07.10, 08:15
  2. Frame löschen
    Von Geflügel im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 10.03.07, 09:02
  3. Antworten: 4
    Letzter Beitrag: 03.03.07, 14:43
  4. Antworten: 2
    Letzter Beitrag: 03.03.07, 01:16
  5. Antworten: 4
    Letzter Beitrag: 01.05.03, 16:52