finalize()

Status
Nicht offen für weitere Antworten.

Rock Lobster

Bekanntes Mitglied
Servus,

auch wenn man nicht sicher sagen kann, wann finalize() aufgerufen wird - eigentlich müßte doch zumindest beim Beenden des Programms diese Methode aufgerufen werden, oder? Oder wird das Programm einfach irgendwie beendet, ohne daß jedes Objekt sauber "zerstört" wird?
 
B

bygones

Gast
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#finalize()

so wie ich das daraus lese.... nein
 

Murray

Top Contributor
Man kann sicher sagen, dass finalize aufgerufen wird, wenn das Objekt "garbage-collected" wird. Dass das beim Beenden passiert, ist nicht gewährleistet; es gibt zwar eine Methode, mit der man dieses Verhalten erzwingen kann (System#runFinalizersOnExit), aber die ist deprecated.
 

Wildcard

Top Contributor
Warum möchtest du finalzier verwenden?
In den allermeisten Fällen denkt ein Entwickler nämlich nur das es finalzier braucht, dabei sind sie in der Regel unnötig, langsam und gefährlich.
 

Rock Lobster

Bekanntes Mitglied
Ich hätte sie halt gerne verwendet, um temporäre Dateien zu löschen, die eine bestimmte Komponente bei mir anlegt. Da dies recht oft vorkommen kann, ist es sinnvoller, die zu löschen, sobald sie nicht mehr benötigt werden, anstatt das erste beim Beenden der Applikation zu machen (da kann ja u.U. das Laufwerk voll werden, was ziemlich kacke wäre).
 

Wildcard

Top Contributor
Glaub mir, du möchtest keine finalizer verwenden. Vor allem nicht aus bequemlichkeit.
Wenn es gar nicht anders geht die Dateien zu löschen, als wenn das Objekt entfernt wird (und meistens geht es auch anders), dann nimm statt finalize PhantomReferences.
 

Rock Lobster

Bekanntes Mitglied
Glaub mir, du möchtest keine finalizer verwenden

Kannst Du das dann wenigstens ein wenig genauer erläutern?

@ Leroy: Das funzt leider auch nicht immer... wie so einiges unter Java... langsam hab ich das Gefühl, Java ist eine Wahrscheinlichkeits-Sprache ;)
 

Leroy42

Top Contributor
Rock Lobster hat gesagt.:
@ Leroy: Das funzt leider auch nicht immer..
Bei mir klappts immer.
Vielleicht liegt es ja daran:
Deletion will be attempted only for normal termination of the virtual machine,
Bist du dir sicher, daß dein Programm nicht irgendwo
eine Exception schmeißt, die du nicht abfängst, und das
normalen Beenden der VM verhindert?
Ansonsten definier mal was du unter nicht immer verstehst.
 

Rock Lobster

Bekanntes Mitglied
Naja klar, wenn die VM außerplanmäßig beendet wird, dann wird das definitiv NICHT aufgerufen. Aber das allein ist schon schlimm genug, weil das ja durchaus vorkommen kann. In dem Fall ist es mir lieber, die Dateien werden so bald wie möglich gelöscht.

Aber mal schauen, ich arbeite grad an einem größeren Projekt mit, und es kann sein, daß ich das verbessern kann, indem ich nicht an meiner Komponente arbeite, sondern an der Anbindung.

@ Wildcard: Okay, werd's mir mal durchlesen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben