Objekt löschen

videlius

Mitglied
Hallo, ich habe ein Objekt, dass gelöscht werden soll.

In Java brauch ich doch nur alle Referenzen auf das Objekt löschen, dann ist es für den GC freigegeben. Wie kann ich sicher sein dass, das Objekt garantiert nicht mehr referenziert wird. Werden Referenzen am Objekt registriert, sodass ich nur schauen muss ob die Liste leer ist, oder muss ich alle Möglichkeiten wo eine Referenz auf dieses Objekt gesetzt wurden sein könnte, durchgehen und am Schluss hoffen, dass ich nix übersehen habe?
 
in einem strukturierten Programm muss man eigentlich nicht hoffen und nicht suchen (außer als fachliche Aufgabe in großen Datenbeständen)
jede irgendwo vorhandene Referenz sollte ihre Gründe haben und nicht einfach so gelöscht werden weil irgendeine andere Programmstelle das will,
man hat normalerweise auch keine Angst, dass Objekten weiterbestehen und Unheil anrichten, wo leben wir denn hier? 😉
außer vielleicht Speicherprobleme

klingt recht komisch bisher,
von Java bekommst du jedenfalls nicht allzu viel Unterstützung, es gibt keine Listen der referenzierten Stellen,
eine Referenz ist auch keine handbare Sache, die man von außen betrachten und ändern kann oder ähnliches
(edit: ok, Attribute von Klassen schon per Reflection)
 
Zuletzt bearbeitet von einem Moderator:
Wenn du eine Referenz auf null setzt, wird sie beim nächsten Durchlauf des GC mit weggeräumt.
Die VM selbst weiß am besten, wann der GC seine Arbeit verrichten sollte. Der Programmierer muss sich um die Speicherverwaltung keine Gedanken machen.
Er kann mit dem Aufruf
Code:
System.gc();
zwar die VM darum bitten, einen GC-Durchlauf anzustoßen, jedoch ist nicht beeinflussbar, wann dies von der VM gemacht wird.
 
... weil irgendeine andere Programmstelle das will, ...

Das will ja nicht irgendeine Programmstelle, sondern dem Objekt soll eine Methode hinzugefügt werden, mit deren Hilfe sich das Objekt selber löscht. Natürlich erst nachdem es getestet hat, ob noch eine Referenz auf das Objekt existiert. Muss ich den This-Zeiger auch auf null setzten?
 
Das will ja nicht irgendeine Programmstelle, sondern dem Objekt soll eine Methode hinzugefügt werden, mit deren Hilfe sich das Objekt selber löscht.
Das macht eher keinen Sinn. Ein Objekt kann sich nicht selbst löschen, da ein beliebiger anderer Teil trotzdem noch ne Referenz auf das Objekt haben kann.

Welchen Sinn sollte deine löschen Methode haben?
 
bleiben wir bei

von Java bekommst du jedenfalls nicht allzu viel Unterstützung, es gibt keine Listen der referenzierten Stellen,
eine Referenz ist auch keine handbare Sache, die man von außen betrachten und ändern kann oder ähnliches
(edit: ok, Attribute von Klassen schon per Reflection)


ich kann zwar Wissenslücken haben, aber will dazu dann noch weiter zum Besten geben:
es gibt auf keinen Fall eine automatische Verfolgung der Variablen, das musst du dir selber irgendwo merken,
oder für Attribute kannst du alle im Programm existierenden Objekte, falls du die gesammelt hat, per Reflection durchgehen

keinen Zugriff wirst du auf lokale Variablen in irgendwelchen Methoden haben,
ganz besonders interessant ist das noch für den garantiert existierenden Aufrufer der aktuellen Methode des Objektes,
dieser Aufrufer hat immer noch mindestens als letzter eine Referenz, ein Objekt kann sich also nie endgültig selber löschen
 
Achso na klar, ich hab nen Denkfehler. Ich halte da Objekt ja trotzdem noch mit einer Referenz, nämlich mit der ich die löschen-Methode des Objektes aufrufen will. Also genügt ist es doch einfach diese Referenz auf null zu setzen und das Objekt ist für den GC freigegeben, oder?
 
wenn niemand anders eine Referenz darauf hält, die schwierigere Hälfte oder auch die schwierigeren 95%
 

Zurück
Oben