Stack (JVM)

Einführung

Eine Java Virtual Machine speichert sogenannte Frames in einem Stack (engl. Stapel). Einen Frame kann man sich als einen Aufruf einer Methode bzw. Methodeninstanz vorstellen. Der Stack verhält sich, wie die Datenstruktur (Stapel) nach der er benannt ist. Der Stack wird nie direkt, sondern nur mit Push- und Pop-Aufrufen manipuliert. Wird eine neue Methode aufgerufen, wird dieser Aufruf als Frame auf dem Stack gespeichert (push). Ist ein Methodenaufruf vollständig abgearbeitet wird der Frame vom Stapel entfernt (pop).

Überschreitet der Stack seine Kapazitätsgrenzen, wirft die Java Virtual Machine einen StackOverflowError. Die Kapazitätsgrenze kann durch den Programmierer erweitert werden. Wenn nicht genügend Speicher zur Verfügung steht, um den Stapel zu erstellen, wirft die Java Virtual Machine einen OutOfMemoryError.

Beispiel

Ein Java Programm startet immer mit der main-Methode. Hierdurch wird ein sogenannter Thread angelegt. Für diesen Thread werden alle Methodenaufrufe (siehe Call Sequence) in Form von Frames wie ein Stack verwaltet. Für jeden Methodenaufruf werden die einzelnen lokalen Variablen gespeichert.

Ganzen unten im Stack befindet sich der erste Methodenaufruf. Ganz oben der Letzte.