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

Gast #4802852
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
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
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
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.
Gast #4802957
> Es wird zwar das Objekt gelöscht aber die Resource nicht freigegeben.

ja das stimmt.
Aber ich lasse doch keine Resourcen offen, wenn ich sie nicht mehr 
brauche :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.