Die Architektur der Java-VM

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
Imperative Programmierung
Imperative Programmierung
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
DI Christian Donner cd (at) donners.com
Kapselung , toString , equals , Java API
der Universität Oldenburg
der Universität Oldenburg
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
ARRAY oder FELD oder VEKTOR
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
1EDV 1 - Java Native Interface Java mit eingebundenen (native) C-Programme Vortrag: Rolf Heitzenröder am
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Laufzeitumgebungen – Das Beispiel der Java Virtual Machine
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Java und Eclipse.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Objektorientiertes Konstruieren
Thread Synchronisation in JAVA
Variablenkonzept Klassisch, in Java Basistyp
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
PI Burgenland Java und JavaScript 1. Teil
Bytecodemanipulation
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java Programme nur ein bisschen objektorientiert.
Konstruktoren.
Hello World! Javakurs 2013 Arne Kappen
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Implementieren von Klassen
 Präsentation transkript:

Die Architektur der Java-VM von Christian Schwarzbauer

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

Architektur der Java-VM Die Architektur der Java-VM

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

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

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

Class Loader Subsystem (1) Aufgaben eines Class Loaders: Loading: finden und importieren von Klasseninformationen Linking: wird unterteilt in: 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

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

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

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

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

Method Area: Beispiel (2) möglicher Ablauf: 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 reserviere Speicher für Klasse an Stelle 1 im Constant Pool 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

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

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

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

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

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

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

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

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

Die Architektur der Java-VM 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 Frame Daten Größe von Implementierung abhängig Die Architektur der Java-VM

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

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

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

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

Operandenstack: Beispiel Die Architektur der Java-VM

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

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

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

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

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

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

Die Architektur der Java-VM 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/Java_Hotspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_1.html Die Architektur der Java-VM