Folie

Werbung
Die Architektur der
Java-VM
von Christian Schwarzbauer
Was versteht man unter JVM ?

3 unterschiedliche Bedeutungen:
 eine

siehe JVM-Specification
 eine

konkrete Implementierung
z.B. von Sun, MS, IBM, …
 eine

abstrakte Computer-Spezifikation
Laufzeit-Instanz
Host für eine Java-Applikation
Die Architektur der Java-VM
2
Architektur der Java-VM
Die Architektur der Java-VM
3
Datentypen der Java-VM (1)
Die Architektur der Java-VM
4
Datentypen der Java-VM (2)
Die Architektur der Java-VM
5
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
Die Architektur der Java-VM
6
Class Loader Subsystem (1)

Aufgaben eines Class Loaders:
Loading: finden und importieren von
Klasseninformationen
2. Linking: wird unterteilt in:
1.
1.
2.
3.
3.
Verifizierung: überprüfen der Korrektheit
Vorbereitung: reservieren & initialisieren von
Speicher für Klassenvariablen
Resolution: transformieren von symbolischen
Referenzen in direkte Referenzen
Initialization: initialisieren von
Klassenvariablen
Die Architektur der Java-VM
7
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())

Die Architektur der Java-VM
8
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)

Die Architektur der Java-VM
9
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

Die Architektur der Java-VM
10
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();
}
}
Die Architektur der Java-VM
11
Method Area: Beispiel (2)

möglicher Ablauf:
1.
2.
3.
4.
finde und lese Datei Volcano.class
speichere Informationen in Method Area
erzeuge Zeiger zum Constant Pool von Volcano
arbeite Bytecodes in MA für main() ab
1.
reserviere Speicher für Klasse an Stelle 1 im Constant Pool
1.
2.
3.
4.
5.
6.
2.
3.
4.
Constant Pool → symbolische Referenz auf Lava
wurde Lava bereits in Method Area geladen ? Nein !
lade Lava.class in Method Area
CP Eintrag 1 → Zeiger auf Klassendaten von Lava (CP Resolution)
suche Objektgröße von Lava aus den Klassendaten
reserviere Speicher für Lava-Objekt auf dem Heap
initialisiere Instanzvariablen auf Default-Werte (0, null)
gib Referenz auf Lava-Objekt auf den Stack
…
Die Architektur der Java-VM
12
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
Die Architektur der Java-VM
13
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 …
Die Architektur der Java-VM
14
Heap: Objekt-Darstellung (2)
Die Architektur der Java-VM
15
Heap: Objekt-Darstellung (3)
Die Architektur der Java-VM
16
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
Die Architektur der Java-VM
17
Heap: Array-Darstellung (2)
Die Architektur der Java-VM
18
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
Die Architektur der Java-VM
19
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
 bei Methodenaufruf wird ein Frame erzeugt
Methode)
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 !
Die Architektur der Java-VM
20
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
Die Architektur der Java-VM
21
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)
Die Architektur der Java-VM
22
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
}
}
Die Architektur der Java-VM
23
lokale Variablen: Beispiel (2)
Die Architektur der Java-VM
24
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

Die Architektur der Java-VM
25
Operandenstack: Beispiel
Die Architektur der Java-VM
26
Frame Daten

enthält Daten für
 Constant

Zeiger auf Constant Pool
 normales

Pool Resolution
Methodenende
Informationen über den vorherigen Stack Frame
 Exception-Behandlung

Referenz auf Exception Table der Methode
 eventuell
auch andere Daten …
Die Architektur der Java-VM
27
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;
}
}
Die Architektur der Java-VM
28
Stack Implementierung: Beispiel (2)
Die Architektur der Java-VM
29
Stack Implementierung: Beispiel (3)
Die Architektur der Java-VM
30
Execution Engine

wieder einmal die 3 unterschiedlichen
Bedeutungen:
 eine

für jede Bytecode-Instruktion wird spezifiziert, was gemacht
werden soll, aber nicht wie
 eine

konkrete Implementierung
Interpretation, Just-in-Time Kompilation, …
 eine

abstrakte Spezifikation
Laufzeit-Instanz
jeder Thread ist eine Instanz einer Execution Engine
Die Architektur der Java-VM
31
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
Die Architektur der Java-VM
32
Literatur

The JavaTM Virtual Machine Specification, 2nd Edition
http://java.sun.com/docs/books/vmspec/

Inside the Java 2 Virtual Machine
http://www.artima.com/insidejvm/ed2/

The Java HotSpot Virtual Machine v1.4.1 White Paper
http://java.sun.com/products/hotspot/docs/whitepaper/Ja
va_Hotspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_1.ht
ml
Die Architektur der Java-VM
33
Herunterladen