Aufrufstack und Heap Flashcards
Speichermodell
° Aufrufstack:
Speicherplatz für lokale Variablen (und Zwischenergebnisse von Ausdrücken); wird stapelartig durch das Laufzeitsystem verwaltet
° Heap: Speicherplatz für dynamisch erzeugte Objekte (mit ihren Exemlarvariablen). Wird explizit vom Entwickler (z.B. new in Java) angefordert. Die Speicherfreigabe erfolgt explizit (z.B. in C++) oder durch den Garbage Collecotr (z.B. in Java).
° Programm: Speicherplatz für den Programmcode (die übersetzen Klassendefinitionen) werden durch das Betriebssystem realisiert.
Heap
° dynamischer Speicher
° ist eine Speicherbereich, aus dem zur Laufzeit eines Programmes zusammenhängende Speicherabschnitte angefordert und in beliebiger Reihenfolge wieder freigegeben werden können
° Die Freigabe kann sowohl manuell als auch mit Hilfe einer automatischen Speicherbereinigung erfolgen
° Eine Speicheranforderung vom Heap wird auch dynamische Speicheranforderung genannt
° Kann eine Speicheranforderung wegen Speichermangel nicht erfüllt werden, kommt es zu einem Programmabbruch (in Java: OutOfMemoryError)
Aufrufstack
° angeforderte Speicherabschnitte werden strikt in der umgekehrten Reihenfolge wieder freigegeben, in der sie angefordert wurden
- automatischer Speicheranforderung (weniger Laufzeitkosten als bei dynamischer Speicheranforderung)
° Beii Spezialfällen kann der für den Stack reserverte Speicher ausgehen. Dann droht en Programmabbruch wegen Spaelüberlauf (in Java: StackOverflowError).
Objektdiagramme: Schnappschüsse vom Heap
° Objektdiagramm in Java ist ein Schnappschuss vom Heap eines laufenden Programms
° Es zeigt einen Ausschnitt des Objektgeflechts zur Laufzeit in der Virtual Machine, um einen bestimmten Aspekt zu verdeutlichen
Garbage Collector in Java
° Voraussetzungen:
- Alle Objekte liegen im Heap
- Auf dem Aufrufstack liegen entweder primitive Werte oder Referenzen auf Objekte
- Nur Objekte, die vom Aufrufstack aus erreichbar sind für die Programmausführung relevant
- Alle anderen Objekte im Heap sind “tote” Objekte
° Vorgehen:
- Beobachtet regelmäßig die Referenzen auf dem Stack
- Von da aus wird transitiv das gesamte Objektgeflecht durchgeschaut und erreichbare Objekte werden markiert
- Anschließend werden alle nicht markierten Objekte im Heap gelöscht
- Das Vorgehen aus Markieren und Abräumen ist im Englischen Mark and Sweep
Methoden und Zustandsfelder zur Laufzeit
° Zur Übersetzungszeit gibt es jede Methode und Exemplarvariable nur einmal
° Se sind statisch in den Klassendefinitionen beschrieben
° Zur Laufzeit gibt es für jedes Exemplar einer Klasse einen eigenen Satz Zustandsfelder und logisch auch einen Satz Methoden