Znoob Geschrieben 25. Juni 2003 Geschrieben 25. Juni 2003 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: Zitieren
MadCro Geschrieben 25. Juni 2003 Geschrieben 25. Juni 2003 also bei variablen ist es doch so das sie nur inerhalbe der definierten Methode ( bei Java heissen die dinger doch Routine oder ?? ) 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 Zitieren
Snowghost Geschrieben 25. Juni 2003 Geschrieben 25. Juni 2003 "GC" ist der GarbageCollector von Java. Auch Objekte, die innerhalb einer Methode deklariert werden, werden erst beim nächsten Anlauf des GCs entfernt. Zitieren
kingofbrain Geschrieben 25. Juni 2003 Geschrieben 25. Juni 2003 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 Zitieren
Naberius Geschrieben 25. Juni 2003 Geschrieben 25. Juni 2003 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. Zitieren
PerdianMG Geschrieben 25. Juni 2003 Geschrieben 25. Juni 2003 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 Zitieren
kingofbrain Geschrieben 26. Juni 2003 Geschrieben 26. Juni 2003 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 Zitieren
PerdianMG Geschrieben 26. Juni 2003 Geschrieben 26. Juni 2003 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 Zitieren
themaster Geschrieben 26. Juni 2003 Geschrieben 26. Juni 2003 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. Zitieren
Empfohlene Beiträge
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.