next up previous contents index
Next: Innere Klassen Up: Klassen und Objekte Previous: Objekterzeugung

Objektzerstörung

   

Nicht unter der Kontrolle des Benutzerprogramms sondern durch einen automatischen Garbage Collector.  

Der weiß zur Laufzeit, welche Objekte existieren und prüft, auf welche Objekte nicht mehr verwiesen wird.

Technisch: Low-priority-thread, der im Hintergrund mitläuft. Nutzt z.B. die Zeiten des Wartens auf Benutzereingabe.

Hohe Priorität bekommt der Garbage Collector nur, wenn der Interpreter keinen Speicher mehr hat.

Für die Entsorgung von Objekten muß also nichts getan werden.

Ein Beispielfall, wo wir dem Garbage Collector helfen können:

   public static void meth ()
   { int big_array[] = new int[100000];
     // rechne auf big_array
     int result = compute(big_array);

     // brauchen big_array nicht mehr
     // nach verlassen von meth kann es
     // entsorgt werden. 
     // falls meth aber NICHT verlassen 
     // wird:

     big_array = null;

     for (;;)    // für immer
       handle_user_input();
   }

Finalisierung von Objekten

    Um die Freigabe der Ressource ``Speicher'' kümmert sich der Garbage Collector.   Andere Ressourcen können in der finalizer-Methode freigegeben werden.

Hier ist die finalizer-Methode aus

java.io.FileOutputStream:

   public void finalize()
     throws IOException; 
     // overrides Object
   { // close the stream
     if (fd != null) 
        close();
   }

Regeln für Finalizer:


next up previous contents index
Next: Innere Klassen Up: Klassen und Objekte Previous: Objekterzeugung

Peter Pfahler, 1997