Die Architektur der Java-VM von Christian Schwarzbauer.

33
Die Architektur der Java-VM von Christian Schwarzbauer

Transcript of Die Architektur der Java-VM von Christian Schwarzbauer.

Page 1: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM

von Christian Schwarzbauer

Page 2: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 2

Was versteht man unter JVM ?

3 unterschiedliche Bedeutungen:eine abstrakte Computer-Spezifikation

siehe JVM-Specification

eine konkrete Implementierung z.B. von Sun, MS, IBM, …

eine Laufzeit-Instanz Host für eine Java-Applikation

Page 3: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 3

Architektur der Java-VM

Page 4: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 4

Datentypen der Java-VM (1)

Page 5: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 5

Datentypen der Java-VM (2)

Page 6: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 6

Wort-Grösse

wird in der Spezifikation der Java-VM gebraucht (z.B. Stack)

die Grösse eines Wortes wird nicht genau vorgeschrieben, nur: ein Wort muss groß genug sein, um einen Wert vom

Typ byte, short, int, char, float, returnAddress oder reference zu beinhalten

zwei Wörter müssen groß genug sein, um einen Wert vom Typ long oder double zu beinhalten

→ Wort muss mindestens 32 Bit groß sein→ richtet sich meist nach Ziel-Plattform

Page 7: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 7

Class Loader Subsystem (1)

Aufgaben eines Class Loaders:1. Loading: finden und importieren von

Klasseninformationen2. Linking: wird unterteilt in:

1. Verifizierung: überprüfen der Korrektheit2. Vorbereitung: reservieren & initialisieren von

Speicher für Klassenvariablen3. Resolution: transformieren von symbolischen

Referenzen in direkte Referenzen

3. Initialization: initialisieren von Klassenvariablen

Page 8: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 8

Class Loader Subsystem (2) 2 verschiedene Arten:

Bootstrap Class Loader: Teil der JVM muss class-Files finden und lesen können Standard - CL (ab JDK 1.2 zusätzl. System CL)

User-Defined Class Loader: Teil einer Applikation

(java.lang.ClassLoader) kann auf Class Loader Subsystem der JVM

zugreifen (defineClass(), findSystemClass(), resolveClass())

Page 9: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 9

Method Area (1)

hier stehen alle Klassen-Informationen zu jeder geladenen Klasse:

Basis-Informationen (z.B. Klasse String) voll qualifizierter Name (java.lang.String) Superklasse (java.lang.Object) Klasse oder Interface (Klasse) Modifiers (public, final) Superinterfaces (Serializable, Comparable, CharSequence)

Page 10: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 10

Method Area (2)

zu jeder geladenen Klasse:erweiterte Informationen

Constant Pool für die Klasse Konstanten der Klasse symbolische Referenzen zu Klassen, Feldern & Methoden

Felder-Informationen & -Reihenfolge Methoden-Informationen, -Reihenfolge & Bytecode Exception Table für jede Methode statische Variablen Referenz auf Instanz von ClassLoader Referenz auf Instanz von Class

Page 11: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 11

Method Area: Beispiel (1)

class Lava { private int speed = 5;

void flow() {}}

class Volcano {

public static void main (String[] args) { Lava lava = new Lava(); lava.flow(); }

}

Page 12: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 12

Method Area: Beispiel (2) möglicher Ablauf:

1. finde und lese Datei Volcano.class2. speichere Informationen in Method Area3. erzeuge Zeiger zum Constant Pool von Volcano4. arbeite Bytecodes in MA für main() ab

1. reserviere Speicher für Klasse an Stelle 1 im Constant Pool1. Constant Pool → symbolische Referenz auf Lava2. wurde Lava bereits in Method Area geladen ? Nein !3. lade Lava.class in Method Area4. CP Eintrag 1 → Zeiger auf Klassendaten von Lava (CP Resolution)5. suche Objektgröße von Lava aus den Klassendaten6. reserviere Speicher für Lava-Objekt auf dem Heap

2. initialisiere Instanzvariablen auf Default-Werte (0, null)3. gib Referenz auf Lava-Objekt auf den Stack4. …

Page 13: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 13

Heap

alle Objekt-Instanzen werden hier erzeugt (auch Arrays)

Bytecode-Instruktionen können Speicher für Objekte erzeugen, aber nicht wieder freigeben

→ meist wird Garbage Collection

verwendet, ist aber nicht vorgeschrieben

Page 14: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 14

Heap: Objekt-Darstellung (1)

Daten eines Objekts: Instanzvariablen

der Klasse des Objekts und aller Superklassen des Objekts

Zeiger auf Klassendaten ist nicht vorgeschrieben aber sehr sinnvoll !

Im folgenden 2 Möglichkeiten …

Page 15: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 15

Heap: Objekt-Darstellung (2)

Page 16: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 16

Heap: Objekt-Darstellung (3)

Page 17: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 17

Heap: Array-Darstellung (1)

Arrays sind in Java Objekte ! Klassenname eines Arrays besteht aus:

eine offene eckige Klammer „[“ für jede Dimension Buchstabe oder String für Typbezeichnung

„I“ für int, „B“ für byte, … „Ljava.lang.Object“, …

z.B. 3-dim. int-Array: „[[[I“2-dim. Object-Array: „[[Ljava.lang.Object“

Mehrdimensionale Arrays werden als Arrays von Arrays dargestellt

Page 18: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 18

Heap: Array-Darstellung (2)

Page 19: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 19

Program Counter

jeder Thread hat eigenes PC Register PC Register ist ein Wort groß 2 Möglichkeiten:

Thread führt eine Java-Methode aus

→ PC enthält Adresse der aktuellen InstruktionThread führt eine native Methode aus

→ PC Inhalt ist undefiniert

Page 20: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 20

Java Stack

jeder Thread hat seinen eigenen Stack nur 2 Operationen: push und pop Stack besteht aus einzelnen Stack Frames

zu jeder Methode gibt es einen Frame immer genau ein Frame ist aktuell (aktuelle Methode) bei Methodenaufruf wird ein Frame erzeugt und zum

neuen aktuelle Frame am Stack (push) bei Methodenende (return oder Exception) wird

der aktuelle Frame verworfen und der vorherige Frame wird zum aktuellen Frame (pop)

ein Thread kann nur auf seinen Stack zugreifen !

Page 21: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 21

Stack Frames

bestehen aus 3 Teilen (Größe wird jeweils in Wörtern angegeben): lokalen Variablen

Größe von Methode abhängig (class-File)Operandenstack

Größe von Methode abhängig (class-File)Frame Daten

Größe von Implementierung abhängig

Page 22: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 22

lokale Variablen

als 0-basiertes Array aus Wörtern organisiert enthalten Parameter (in deklarierter

Reihenfolge) und lokale Variablen einer Methode

Datentypen: byte, short, char und boolean werden in int

konvertiert 1 Eintrag: int, float, reference, returnAddress

2 Einträge: long und double (werden über 1. Index angesprochen)

Page 23: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 23

lokale Variablen: Beispiel (1)

class Example {

public static int runClassMethod(int i, long l, float f, double d, Object o, byte b) {

return 0; }

public int runInstanceMethod(char c, double d, short s, boolean b) {

return 0 }

}

Page 24: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 24

lokale Variablen: Beispiel (2)

Page 25: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 25

Operandenstack

ebenfalls als Array aus Wörtern organisiert nur push und pop erlaubt Datentypen wie bei lokalen Variablen JVM ist Stack-Maschine (keine Register)

Instruktionen holen Operanden von: Operandenstack (fast immer) Opcode im Bytecode Constant Pool

Page 26: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 26

Operandenstack: Beispiel

Page 27: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 27

Frame Daten

enthält Daten fürConstant Pool Resolution

Zeiger auf Constant Poolnormales Methodenende

Informationen über den vorherigen Stack FrameException-Behandlung

Referenz auf Exception Table der Methodeeventuell auch andere Daten …

Page 28: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 28

Stack Implementierung: Beispiel (1)

class Example {

public static void addAndPrint(){ double result = addTwoTypes(1, 88.88); System.out.println(result); }

public static double addTwoTypes(int i, double d) {

return i + d; }

}

Page 29: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 29

Stack Implementierung: Beispiel (2)

Page 30: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 30

Stack Implementierung: Beispiel (3)

Page 31: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 31

Execution Engine

wieder einmal die 3 unterschiedlichen Bedeutungen: eine abstrakte Spezifikation

für jede Bytecode-Instruktion wird spezifiziert, was gemacht werden soll, aber nicht wie

eine konkrete Implementierung Interpretation, Just-in-Time Kompilation, …

eine Laufzeit-Instanz jeder Thread ist eine Instanz einer Execution Engine

Page 32: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 32

Execution Engine: Techniken

Interpretation sehr einfach (1. Generation der VMs)

Just-in-Time Kompilation 1. Ausführung einer Methode → nativer Code

adaptive Optimization Mischung aus Interpretation und JIT Kompilation Code-Ausführung wird beobachtet 80 - 90 % der Zeit → 10 - 20 % des Codes wird z.B. in Suns HotSpot VM verwendet

Page 33: Die Architektur der Java-VM von Christian Schwarzbauer.

Die Architektur der Java-VM 33

Literatur

The JavaTM Virtual Machine Specification, 2nd Editionhttp://java.sun.com/docs/books/vmspec/

Inside the Java 2 Virtual Machinehttp://www.artima.com/insidejvm/ed2/

The Java HotSpot Virtual Machine v1.4.1 White Paper

http://java.sun.com/products/hotspot/docs/whitepaper/Java_Hotspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_1.html