Leben und Sterben eines Objekts - beim O'Reilly Verlag
Leben und Sterben eines Objekts - beim O'Reilly Verlag
Leben und Sterben eines Objekts - beim O'Reilly Verlag
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Konstruktoren <strong>und</strong> GC<br />
Instanzvariable<br />
Ich habe mal einen Aufklärungsfilm darüber gesehen.<br />
Sieht nach einem ziemlich grausamen Ende<br />
aus. Wenn die Methode endet, weil sie auf die<br />
schließende geschweifte Klammer stößt, wird der<br />
Frame im Wortsinn vom Stack geblasen! Das muss<br />
schon schmerzhaft sein.<br />
Ich lebe mit den Objekten auf dem Heap. Na,<br />
nicht mit den Objekten, sondern eigentlich in<br />
einem Objekt. Dem Objekt, dessen Zustand ich<br />
festhalte. Ich muss zugeben, dass das <strong>Leben</strong> auf<br />
dem Heap eine ziemlich luxuriöse Angelegenheit<br />
sein kann. Viele von uns fühlen sich schuldig,<br />
insbesondere während der Feiertage.<br />
Okay. Theoretisch ja. Wenn ich eine Instanzvariable<br />
von Halsband bin <strong>und</strong> das Halsband von der GC<br />
geschluckt wird, werden auch die Instanzvariablen<br />
von Halsband weggeworfen wie die Zeitung vom<br />
Vortag. Aber mir hat man erzählt, das würde fast<br />
nie passieren.<br />
Sie lassen uns trinken?<br />
Lokale Variable<br />
wir <strong>und</strong> der Wert, den wir festhalten, sicher. Aber<br />
es ist eine zweifelhafte Freude, wenn unser Frame<br />
wieder läuft. Einerseits sind wir endlich wieder<br />
aktiv. Andererseits nagt die Uhr wieder an unseren<br />
kurzen <strong>Leben</strong>. Je länger unsere Methode läuft, um<br />
so näher kommen wir dem Ende der Methode.<br />
Und wir wissen alle, was dann passiert.<br />
Das musst du mir nicht sagen. Normalerweise<br />
verwendet man den Begriff entfernen, wie in »der<br />
Frame wurde vom Stack entfernt«. Das klingt so<br />
sachlich, so nach Hausputz. Aber du hast den Film<br />
ja gesehen. Warum reden wir nicht ein bisschen<br />
über dich? Ich weiß, wie mein kleiner Stack-Frame<br />
aussieht, aber wo lebst du eigentlich?<br />
Aber ihr lebt nicht immer so lang wie das Objekt,<br />
das euch deklariert hat, oder? Nehmen wir<br />
beispielsweise an, es gibt ein H<strong>und</strong>-Objekt mit<br />
einer Halsband-Instanzvariable. Stell dir vor, du<br />
wärst eine Instanzvariable des Halsband-<strong>Objekts</strong>.<br />
Vielleicht eine Referenz auf eine Namensschild-Instanz<br />
oder so was. Und du sitzt da glücklich in dem<br />
Halsband-Objekt, das glücklich in dem H<strong>und</strong>-Objekt<br />
sitzt. Aber ... was passiert, wenn der H<strong>und</strong> ein<br />
neues Halsband will oder seine Halsband-Instanzvariable<br />
auf null setzt? Dann kann das Halsband-<br />
Objekt für die GC ausgewählt werden. Und wenn<br />
du eine Instanzvariable in Halsband bist <strong>und</strong> das<br />
ganze Halsband aufgegeben wird, was passiert dann<br />
mit dir?<br />
Und das hast du geglaubt? Das erzählen die uns,<br />
damit wir motiviert <strong>und</strong> produktiv bleiben. Aber<br />
vergisst du da nicht etwas? Was ist, wenn du eine<br />
Instanzvariable in einem Objekt bist <strong>und</strong> dieses<br />
Objekt nur von einer lokalen Variablen referenziert<br />
wird? Wenn ich die einzige Referenz auf das Objekt<br />
bin, in dem du steckst, nehme ich dich mit, wenn<br />
ich gehe. Ob es dir gefällt oder nicht, unser Schicksal<br />
kann verknüpft sein. Deswegen schlage ich vor,<br />
dass wir den ganzen Kram jetzt vergessen <strong>und</strong> uns<br />
besaufen, so lange wir die Zeit dazu haben. Carpe<br />
RAM <strong>und</strong> alles.<br />
Sie sind hier 265