Zum Inhalt springen

Wie lange bleibt ein Objekt im Speicher?


Empfohlene Beiträge

Geschrieben

Wenn man innerhalb einer Methode ein Objekt definiert und instanziiert, wird es dann nach dem verlassen der Methode auch gleich durch den GC aus dem Speicher entfernt?

Oder geschieht das erst beim nächsten Aufruf des GC?

Das dieses Objekt nicht mehr benötigt wird, müsste der GC doch erkennen, sobald die Methode verlassen wird, oder?

:confused: :confused: :confused:

Geschrieben

also bei variablen ist es doch so das sie nur inerhalbe der definierten Methode ( bei Java heissen die dinger doch Routine oder ?? :P )

existierten (wenn sie nicht als globale varibale angelegt wurden)

das müsste doch genau so mit objekten sein ?!

eee was ist ein GC ?? ich dachte immer ein destruktor ist der jeniger der den Speicherplatz wieder frei gibt. :confused:

gruß

MadCro :marine

Geschrieben

Servus!

Es ist egal, wo die Objekte definiert und instanziert werden. Sie werden, sobald nichts mehr auf sie eine Referenz besitzt, zum Abschuss freigegeben. Wenn der GC das nächste Mal kommt, dann nimmt er sie mit.

Ausnahmen natürlich static Objekte (bei final bin ich mir nicht sicher, wann sie zum löschen freigegeben werden)

Zum Thema "Was ist ein GC" und "dafür gibts doch einen Destruktor": die Überschrift für diesen Bereich heisst "Java". Dort sind Destruktoren erstmal nicht vorhanden und der GC gehört in die Grundschulung.

Peter

Geschrieben
Original geschrieben von kingofbrain

Dort sind Destruktoren erstmal nicht vorhanden und der GC gehört in die Grundschulung.

Peter

Stimmt. Allerdings wird bei jedem Object das im GC landet die finalize Methode aufgerufen. Also eine Art Ersatz-Destruktor.

Hier sollte man aber aufpassen da man nicht genau sagen kann wann der GC kommt so das es zu sehr unschönen nebeneffekten kommen kann.

Geschrieben
Allerdings wird bei jedem Object das im GC landet die finalize Methode aufgerufen. Also eine Art Ersatz-Destruktor.

Nein auch keine Art Ersatz-Destruktur. Bei einem Destruktor bist du sicher, dass er aufgerufen wird, wenn dein Object zerstört wird (sonst würde ihn ja niemand aufrufen *g* aber okay), bei finalize() kannst du nie wirklich wissen, ob sie auch wirklich aufgerufen wird, denn wie in der Doku steht es _sollte_ zwar von der VM immer getan werden, aber wirklich sicher sein kannst du nicht.

Ciao

Christian

Geschrieben

Ausserdem kommt es bei der finalize() Methode auch immer auf den GC an. Der, der ihn schreibt, muss die nämlich aufrufen. Und deshalb gehe ich immer davon aus, dass Objekte keinen Destruktor haben. Habe ich bis jetzt auch nicht gebraucht (und fand ich bei C++ ziemlich nervig)

Peter

Geschrieben
Und deshalb gehe ich immer davon aus, dass Objekte keinen Destruktor haben. Habe ich bis jetzt auch nicht gebraucht (und fand ich bei C++ ziemlich nervig)
Wie man es auch immer drehen will: es gibt in Java keinen Destruktor. Wie auch? Wie willst du ihn aufrufen? Sowas wie .free() gibt's nicht und .finalize() ist protected also kann man das auch nicht als quasi Destruktor sehen.

Ciao

Christian

Geschrieben

Wieso ist finalize() kein Destruktor???

Was hat free, delete mit einem Destuktor zu tun? delete ruft den Destruktor auf, er ist es aber nicht.(C++)

finzalize wird vom gc aufgerufen, ob er protected ist oder nicht ist egal. Eigentlich ist es sogar sehr sinnvoll damit nicht irgendwer auf die Idee kommt, zwischendurch mal eben finalize aufzurufen. Die VM kann (per Reflektion) die protected-Grenze aber mühelos überwinden.

IMHo wird finalize immer aufgerufen. Das Problem mit damit ist, dass du nicht weißt wann. In 10 Sekunden nach der Freigabe des Objektes, in einer halben Stunde oder erst beim Beenden der VM.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...