CONTENT | PREV | NEXT

1 Einleitung

Die Java Virtual Machine (JVM) ist ein abstrakter Computer, welcher vorkompilierten Java-Code (Bytecode) ausführt.  Die JVM fungiert somit als Vermittlungsschicht zwischen Java Anwendung und realer Hardware. Ursprünglich wurde Java als Netzsprache konzipiert. Anwendungscode sollte klein und portabel sein. Um diese Bedürfnisse zu befriedigen, entschieden sich die Autoren der JVM Spezifikation für eine Stackarchitektur. Dieser Vortrag beschäftigt sich mit dem Speichermanagement dieser Architektur, insbesondere mit Garbage Collection Algorithmen und den ab Java 2 eingeführten Reference Objects.

1.1 Virtuelle Hardware

Jedes Programm benötigt Resourcen. Die Java Hardware ist im Wesentlichen in vier verschiedene Bereiche unterteilt:
 
  1. Register
    • jede JVM besitzt insgesamt nur 4 (!!!)  Register
    • alle Register sind 32 bit breit
    • pc (program counter) - zeigt auf die nächste Anweisung (Method Area)
    • vars (local variables) - zeigt auf die erste lokale Variable der aktuellen Methode (Stack)
    • frame (execution environment) - zeigt auf Zustandsinformationen der aktuellen Methode (Stack)
    • optop (operand top) - zeigt auf die Stackspitze (Stack)

     
  2. Method Area
    • vgl. Codesegment
    • enthält geladenen Bytecode
    • shared memory für alle Threads

     
  3. Stack
    • vgl. Stacksegment
    • enthält die Frames der aufgerufenen Methoden, wobei das oberste Frame zur aktuellen Methode gehört
    • jedes Frame enthält Bereiche für lokale Variablen, Zustandsinformationen und Operationen
    • jeder Thread besitzt eigenen Stack

     
  4. Heap
    • vgl. Datensegment
    • stellt Speicher für die Alloziierung von Objekten und Arrays zur Verfügung (Bemerkung: Heap wird normalerweise auch für die Method Area benutzt)
    • shared memory für alle Threads
    • garbage collected
a stack frame

1.2 Speicherreservierung

1.3 Speicherfreigabe


 
© 1999 sven.buergel@informatik.tu-chemnitz.de