Sollte man in Java Objekte aufräumen, wenn das Programm beendet wird?

Gast #4802852
Lesenswert?

Wenn ich z.b. eine Klasse mit einer Main Methode habe, in der Objekte 
erzeugt wurden, soll ich die nicht mehr benötigten Objekte dann am Ende 
derefenzieren so dass sie der GC explizit aufräumt oder lässt man das 
weg, weil das Programm ja eh beendet wird?
1
  public static void main(String[] args) {
2
              Person per1 = new Person("Fritz");
3
              Person per2 = new Person("Hans");
4
              Boolean ende = false;
5

6
              do{
7
                // mach was, bis ende gleich true
8

9
              while(!ende)
10

11
              /* Soll man hier die Objekte dann derefenzieren, 
12
                 so dass der GC sie expliztit aufräumt oder
13
                 soll man das weg lassen? * /
14
              // z.b. könnte ich ja schreiben:
15
              per1 = null;
16
              per2 = null;
17

18
        }
Persönliche Seite #4802875
Lesenswert?

Nicht aufräumen. Es sei denn, andere Ressourcen, z.B. offene 
Filehandles, DB-Connections oder was auch immer, hängen da mit dran. Die 
sollte man natürlich zumachen.

Das selbe gilt übrigens auch während des Programms.
Der Garbage-Collector weiß am besten, was nicht mehr gebraucht wird. Ein 
Aufruf von finalize() oder nullen der Objektreferenzen ist i.A. nicht 
sinnvoll, insbesondere wenn die Variablen eh bald aus dem Scope laufen.
Gast #4802927
Lesenswert?

Der GC räumt hinter dir auf.
alles was keine Referenz mehr hat wird vom GC gelöscht.
xx o;
o = new xx(); //erstes obj
o = new xx(); // zweites obj

jetzt existiert auf das erste obj keine Referenz mehr und der GC löscht 
dieses.

wenn du jetzt die main verlassen werden wird die Referenz auf das zweite 
obj auch gelöscht(Geistlichkeit Bereich), sodass dann auch das zweite 
obj vom GC eingesammelt wird.
Gast #4802933
Lesenswert?

basti schrieb:
> o = new xx(); //erstes obj
> o = new xx(); // zweites obj
>
> jetzt existiert auf das erste obj keine Referenz mehr und der GC löscht
> dieses.

so einfach ist es leider nicht. Es gibt Resourcen (Filehandels, 
Schriftarten) wo man nicht funktioniert.

Es wird zwar das Objekt gelöscht aber die Resource nicht freigegeben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren