Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Die Architektur der Java-VM von Christian Schwarzbauer.

Ähnliche Präsentationen


Präsentation zum Thema: "Die Architektur der Java-VM von Christian Schwarzbauer."—  Präsentation transkript:

1 Die Architektur der Java-VM von Christian Schwarzbauer

2 Die Architektur der Java-VM2 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

3 Die Architektur der Java-VM3 Architektur der Java-VM

4 Die Architektur der Java-VM4 Datentypen der Java-VM (1)

5 Die Architektur der Java-VM5 Datentypen der Java-VM (2)

6 Die Architektur der Java-VM6 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

7 Die Architektur der Java-VM7 Class Loader Subsystem (1) Aufgaben eines Class Loaders: 1. Loading: finden und importieren von Klasseninformationen 2. Linking: wird unterteilt in: 1. Verifizierung: überprüfen der Korrektheit 2. Vorbereitung: reservieren & initialisieren von Speicher für Klassenvariablen 3. Resolution: transformieren von symbolischen Referenzen in direkte Referenzen 3. Initialization: initialisieren von Klassenvariablen

8 Die Architektur der Java-VM8 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() )

9 Die Architektur der Java-VM9 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 )

10 Die Architektur der Java-VM10 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

11 Die Architektur der Java-VM11 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(); }

12 Die Architektur der Java-VM12 Method Area: Beispiel (2) möglicher Ablauf: 1. finde und lese Datei Volcano.class 2. speichere Informationen in Method Area 3. erzeuge Zeiger zum Constant Pool von Volcano 4. arbeite Bytecodes in MA für main() ab 1. reserviere Speicher für Klasse an Stelle 1 im Constant Pool 1. Constant Pool symbolische Referenz auf Lava 2. wurde Lava bereits in Method Area geladen ? Nein ! 3. lade Lava.class in Method Area 4. CP Eintrag 1 Zeiger auf Klassendaten von Lava (CP Resolution) 5. suche Objektgröße von Lava aus den Klassendaten 6. 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 Stack 4. …

13 Die Architektur der Java-VM13 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

14 Die Architektur der Java-VM14 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 …

15 Die Architektur der Java-VM15 Heap: Objekt-Darstellung (2)

16 Die Architektur der Java-VM16 Heap: Objekt-Darstellung (3)

17 Die Architektur der Java-VM17 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

18 Die Architektur der Java-VM18 Heap: Array-Darstellung (2)

19 Die Architektur der Java-VM19 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 Instruktion Thread führt eine native Methode aus PC Inhalt ist undefiniert

20 Die Architektur der Java-VM20 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 !

21 Die Architektur der Java-VM21 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

22 Die Architektur der Java-VM22 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)

23 Die Architektur der Java-VM23 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 }

24 Die Architektur der Java-VM24 lokale Variablen: Beispiel (2)

25 Die Architektur der Java-VM25 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

26 Die Architektur der Java-VM26 Operandenstack: Beispiel

27 Die Architektur der Java-VM27 Frame Daten enthält Daten für Constant Pool Resolution Zeiger auf Constant Pool normales Methodenende Informationen über den vorherigen Stack Frame Exception-Behandlung Referenz auf Exception Table der Methode eventuell auch andere Daten …

28 Die Architektur der Java-VM28 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; }

29 Die Architektur der Java-VM29 Stack Implementierung: Beispiel (2)

30 Die Architektur der Java-VM30 Stack Implementierung: Beispiel (3)

31 Die Architektur der Java-VM31 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

32 Die Architektur der Java-VM32 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 % der Zeit % des Codes wird z.B. in Suns HotSpot VM verwendet

33 Die Architektur der Java-VM33 Literatur The Java TM Virtual Machine Specification, 2nd Edition Inside the Java 2 Virtual Machine The Java HotSpot Virtual Machine v1.4.1 White Paper va_Hotspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_1.ht ml


Herunterladen ppt "Die Architektur der Java-VM von Christian Schwarzbauer."

Ähnliche Präsentationen


Google-Anzeigen