Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class class C.class D.java Java Virtual Machine (JVM) (- Interpretierer) aus Informatik I! 22 Prof. Dr. Rainer Manthey Informatik II 2
JVM: Übersicht in diesem Abschnitt: genaueres Kennenlernen der Java Virtual Machine als Beispiel für einen Interpretierer einer höheren Programmiersprache, der kompilierten Zwischencode verarbeitet und damit quasi wie ein Laufzeitsystem arbeitet. JVM kann sogar - zur Performanzsteigerung - selbst wieder mittels eines Compilers auf einer bestimmten Maschine implementiert werden (oder sogar direkt als Maschinensprache eines speziellen Prozessors dienen). Mittlerweile ist die JVM von verschiedensten Herstellern und für verschiedenste Plattformen erhältlich. Die Java Virtual Machine ist somit zum einen ein theoretisches Konzept als Vorlage für alle Java- Realisierungen als spezifische Realisierung dieses Konzepts eine konkrete Maschine für ein spezifisches Programm eine konkrete Instanz dieser Maschine 22 Prof. Dr. Rainer Manthey Informatik II JVM: Interne Struktur Zwischencode-Fragmente des Java Compilers Speicherplatz für die Programmbearbeitung eigentliches Laufzeitsystem 22 Prof. Dr. Rainer Manthey Informatik II 4
Runtime Data Area: Method Area und Heap Method Area für jede Klasse Programmcode Konstanten Klassenvariablen Heap (dt.: "Halde") für jedes Objekt Instanzvariablen Referenz auf zug. Klasse von allen Threads der JVM gemeinsam genutzt Objekte auf dem Heap werden nie explizit entfernt. Objekte, die nicht Ziel einer Referenz sind, werden bei Bedarf automatisch entfernt ("garbage collection"). 22 Prof. Dr. Rainer Manthey Informatik II 5 Kellerspeicher: Prinzip Die Werte der lokalen Variablen und der aktuellen Parameter werden für jeden Methodenaufruf in einem eigenen virtuellen Speicherbereich abgelegt: Methodenrahmen ("method frame") Alle Methodenrahmen eines Threads werden in einem diesem Thread zugeordneten Teil des Speichers gemäß dem Kellerprinzip verwaltet: Kellerspeicher engl.: "stack" Kellerprinzip: Füge neue Einträge stets "oben", d.h. "über" allen alten Einträgen ein: -Operation ("to ": schieben) Nur der jeweils oberste Eintrag kann dem Speicher entnommen werden: -Operation ("to out": hervorschießen) Die Rahmen in einem Stack sind untereinander durch Zeiger verkettet, die der Aufrufreihenfolge der Methoden entsprechen. 22 Prof. Dr. Rainer Manthey Informatik II 6
Kellerprinzip (2) ein kleines "Kellerprogramm":. 2. 4. 4. 7 5. 6. 22 Prof. Dr. Rainer Manthey Informatik II 7 Kellerprinzip () 4 ein kleines "Kellerprogramm":. 2. 4. 4. 7 5. 6. 4 22 Prof. Dr. Rainer Manthey Informatik II 8
Kellerprinzip (4) ein kleines "Kellerprogramm":. 2. 4. 4. 7 5. 6. 4 22 Prof. Dr. Rainer Manthey Informatik II 9 Kellerprinzip (5) 7 ein kleines "Kellerprogramm":. 2. 4. 4. 7 5. 6. 7 22 Prof. Dr. Rainer Manthey Informatik II
Kellerprinzip (6) ein kleines "Kellerprogramm":. 2. 4. 4. 7 5. 6. 7 22 Prof. Dr. Rainer Manthey Informatik II Kellerprinzip (7) ein kleines "Kellerprogramm":. 2. 4. 4. 7 5. 6. 22 Prof. Dr. Rainer Manthey Informatik II 2
Kellerprinzip (8) ein kleines "Kellerprogramm":. 2. 4. 4. 7 5. 6. 22 Prof. Dr. Rainer Manthey Informatik II Runtime Data Area: Stacks Jeder Thread erhält ein eigenes Programmzähler-Register, einen eigenen Stack (für lokale Variablen und Operanden) und ggf. einen eigenen Stack für Methoden in externen Sprachen ("native methods"). current frame Zu jedem Zeitpunkt ist genau eine Methode aktiv, zu der genau ein aktueller Speicherrahmen ("current frame") gehört. 22 Prof. Dr. Rainer Manthey Informatik II 4
Stack Frames Jeder Speicherrahmen (stack frame) für einen Methodenaufruf wird beim Aufruf der Methode erzeugt beim Verlassen der Methode wieder zerstört mit dem Speicherrahmen der direkt aufrufenden Methode verkettet. Aufbau eines Stack Frames: 2 Array von Zellen für Werte lokaler Variablen... Operandenstack 22 Prof. Dr. Rainer Manthey Informatik II 5 Interne Datentypen der JVM Für jeden Typ gibt es spezielle instruktionen, die durch den ersten Buchstaben des jeweiligen Typs unterschieden werden: f, d, i, l usw. (byte, short, char, boolean werden in int konvertiert) 22 Prof. Dr. Rainer Manthey Informatik II 6
Instruktionen der JVM sind genau ein Byte lang: Der ist unabhängig vom verwendeten Betriebssystem und vom verwendeten Rechner: "plattformunabhängig" Die -Technik wurde bereits seit den 97er Jahren eingesetzt, um Programme leichter portierbar zu machen (z.b. für LISP und Prolog) Der der JVM ähnelt in seiner Struktur Maschinen- bzw. (in der -Version) Assemblersprache. wird durch einen -Interpreter ausgeführt, der in der JVM die Rolle eines Laufzeitsystems spielt. -Programme sind sehr kompakt und eignen sich daher gut für die Übertragung übers Netz ( => Applets). Die JVM kennt insgesamt 255 verschiedene -Instruktionen. 22 Prof. Dr. Rainer Manthey Informatik II 7 (2) einige Beispiele für typische -Instruktionstypen: iconst_<i> "Push" int-konstante i auf den Stack! iload_<n> "Push" Inhalt der lokalen Variablen mit n auf den Stack! istore_<n> "Pop" oberstes Stackelement in die lokale Variable mit n! iinc <n> <i> Inkrementiere Variable mit n um i! (-Byte-Befehl) Multipliziere die beiden obersten Stackwerte (und "" sie dann). Lege Resultat oben auf den Stack! goto <offset> Addiere offset (mit Vorzeichen, 2 Byte lang) zur Adresse des goto-befehls und springe dorthin! 22 Prof. Dr. Rainer Manthey Informatik II 8
JVM: Beispiel Sourcecode public static void domathforever( ) { int i = ; for (;;) { i += ; i *= 2; } } relative Zeilennummer Beispiel für JVM-Code 4 6 5 ff Java-Compiler 7 iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 9 JVM: Beispiel 4 6 5 ff iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 2
JVM: Beispiel 4 6 5 ff iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 2 JVM: Beispiel 4 6 5 ff iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 22
JVM: Beispiel 4 6 5 ff iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 2 JVM: Beispiel 2 4 6 5 ff iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 24
JVM: Beispiel 2 2 4 6 5 ff iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 25 JVM: Beispiel 2 4 6 5 ff iconst_ iinc iload_ 2 22 Prof. Dr. Rainer Manthey Informatik II 26
JVM: Beispiel 2 und so weiter... 4 6 5 ff iconst_ iinc iload_ 22 Prof. Dr. Rainer Manthey Informatik II 27 Bücher zur Java Virtual Machine Tim Lindholm, Frank Yellin: "The Java TM Virtual Machine Specification" 2 nd edition, Microsoft Press Bill Venners: "Inside the Java 2 Virtual Machine" McGraw Hill, 998 22 Prof. Dr. Rainer Manthey Informatik II 28
JVM im Internet Webquellen zur JVM: "offizielle" JVM-Spezifikation von Sun als Download: http://java.sun.com/docs/books/vmspec/ Kapitel 5 des Buches "Inside the Java Virtual Machine": http://www.artima.com/insidejvm/ed2/ch5javavirtualmachine.html ausserdem: Kap. 2. und 8 im Java-Buch von Goll u.a. 22 Prof. Dr. Rainer Manthey Informatik II 29