Forum: PC-Programmierung Sollte man in Java Objekte aufräumen, wenn das Programm beendet wird?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von JJ (Gast)


Bewertung
0 lesenswert
nicht 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?
  public static void main(String[] args) {
              Person per1 = new Person("Fritz");
              Person per2 = new Person("Hans");
              Boolean ende = false;

              do{
                // mach was, bis ende gleich true

              while(!ende)

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

        }

von Speichen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es gibt auch andere Ressourcen außer Speicher die ggf. kontrolliert 
abgeräumt werden sollten.

von Tilo R. (joey5337) Benutzerseite


Bewertung
1 lesenswert
nicht 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.

von whatt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
file handles schließt das Betriebssystem automatisch wenn der Prozess 
hops geht.

von Tilo R. (joey5337) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
whatt schrieb:
> file handles schließt das Betriebssystem automatisch wenn der Prozess
> hops geht.

Ja, war eher so als allgemeiner Hinweis gedacht.
Man soll nicht aufräumen aber sich angewöhnen, externe Ressourcen schon 
irgendwann zumachen, zumindest wenn das Programm noch länger läuft.

(Strategien wie Connection Pooling jetzt mal außen vor)

von basti (Gast)


Bewertung
0 lesenswert
nicht 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.

von basti (Gast)


Bewertung
1 lesenswert
nicht lesenswert
> obj auch gelöscht(Geistlichkeit Bereich), sodass dann auch das zweite
> obj vom GC eingesammelt wird.

natürlich "Gültigkeitsbereich" ...

von Peter II (Gast)


Bewertung
0 lesenswert
nicht 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.

von basti (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> 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 :)

von JJ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.