Einführung in die Systemprogrammierung Das Laufzeitsystem von Java Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 25. Juni 2015 Java: Die Sprache I I I I Objektorientierte Sprache Portabler Zwischencode (Java-Bytecode) Initiales Design: James Gosling, Bill Joy, Guy Steele Basiert ursprünglich auf C89 mit Ideen aus Self, Smalltalk public class Zehn { public static final void main( String [] args) { for (int i = 1; i <= 10; i++) { System .out. println (i); } } } Java: Übersetzung und Ausführung Quellcode .java Java-Laufzeitsystem javac Bytecode .class java Lader/Binder (Classloader) JIT-Übersetzer Interpreter Maschinencode Java: Bytecode public class Zehn { public static final void main(String[] args) { for (int i = 1; i <= 10; i++) { System.out.println(i); } } 0: 1: 2: 3: 5: 8: 11: 12: 15: 18: 21: iconst_1 istore_1 iload_1 bipush if_icmpgt getstatic iload_1 invokevirtual iinc goto return 10 21 #2 #3 1, 1 2 } Konstantenliste java/lang/System.out:Ljava/io/PrintStream; java/io/PrintStream.println:(I)V Java: Ausführung I I Interpretierung ähnlich Python Unterschied: I I Stapelmaschine in Python speichert nur Objekte (Zahlen werden zu Objekten konvertiert) Stapelmaschine in Java speichert: I I I I Objekte Ganzzahlen Fließkommazahlen Übersetzung zur Laufzeit (JIT): anderes Modul Steckbrief: Java Java Version: Datum: Quelle: 1.8.0u45 (Oracle) 2015-04-14 http://java.com (Oracle Inc.) Laufzeitsystem Zwischensprache: In Datei (Java-Bytecode) Ausführungsmodus: JIT (HotSpot) Sprache Sprachtyp: Objektorientiert Starke Typisierung: ja (statisch + dynamisch) Sprachkonstrukte: Klassen, Objekte, Dynamische Übersetzung, Reflektion