09.05.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Konstruktoren <strong>und</strong> GC<br />

Objekt-Killer Nr. 1<br />

Die Referenz verliert<br />

dauerhaft ihre<br />

Geltung.<br />

public class StackRef {<br />

public void foof() {<br />

barf();<br />

}<br />

public void barf() {<br />

Ente e = new Ente();<br />

}<br />

}<br />

Mir gefällt nicht,<br />

worauf das hinausläuft.<br />

1<br />

2<br />

foof() wird auf den Stack<br />

geschoben. Keine Variablen<br />

sind deklariert.<br />

barf() wird auf den Stack<br />

geschoben. Dort deklariert<br />

es eine Referenzvariable<br />

<strong>und</strong> erzeugt ein neues<br />

Objekt, das dieser Referenz<br />

zugewiesen wird. Das<br />

Objekt wird auf dem Heap<br />

erzeugt, <strong>und</strong> die Referenz<br />

lebt <strong>und</strong> ist in Geltung.<br />

foof()<br />

barf()<br />

foof()<br />

e<br />

Heap<br />

Ente-Objekt<br />

Die neue Ente kommt auf den<br />

Heap, <strong>und</strong> solange barf() läuft,<br />

lebt die Referenz »e« <strong>und</strong> ist<br />

gültig. Die Ente wird also als<br />

lebend betrachtet.<br />

3<br />

barf() ist beendet <strong>und</strong> wird<br />

vom Stack genommen.<br />

Der Stack-Frame wird aufgelöst,<br />

<strong>und</strong> »e« ist jetzt tot<br />

<strong>und</strong> weg. Die Ausführung<br />

kehrt zu foof() zurück,<br />

aber foof() kann »e« nicht<br />

verwenden.<br />

e<br />

foof()<br />

Heap<br />

Ente-Objekt<br />

Oje! Als der Stack-Frame<br />

für barf() vom Stack geblasen<br />

wurde, ging die Variable »e«,<br />

<strong>und</strong> damit wurde die Ente<br />

aufgegeben. Garbage Collector-Futter.<br />

Sie sind hier 261

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!