Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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:

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

"GC" ist der GarbageCollector von Java.

Auch Objekte, die innerhalb einer Methode deklariert werden, werden erst beim nächsten Anlauf des GCs entfernt.

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

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.

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

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

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.