Von Java zum Bytecode

Werbung
Von Java
zum Bytecode
Seminar: Implementierung moderner virtueller Maschinen
am Beispiel von Java
Tri-Thong Truong
Übersicht
●
Einstieg: Was ist Bytecode?, Aufbau einer VM
●
Scanner, Parser, Aufbau eines Syntaxbaumes
●
Visitor-Pattern, TreeWalker
●
Optimierungen
2
Java-Compiler
Quellprogramm
Quellprogramm wird in Zwischenprogramm
(Bytecode) compiliert.
Übersetzer
Zwischenprogramm
Eingabe
Bytecode wird von VM interpretiert.
Virtuelle
Maschine
Ausgabe
3
Aufbau einer VM
●
●
●
●
JVM ist Stack-basiert
Jeder Thread hat einen eigenen
JVM-Stack mit Frames
Jeder Aufruf einer Funktion
erzeugt neuen Frame
Ein Frame besteht im
Wesentlichen aus:
- Operand Stack,
- Array of local variables, und
- einer Referenz auf den
Constant pool der der Funktion
übergeordneten Klasse
Constant pool
4
Was ist Bytecode?
●
Bytecode vergleichbar mit Assembler in C/C++
●
Bytecode entweder direkt in VM, oder auch JIT
●
Bytecode sorgt für Plattformunabhängigkeit
5
Übersicht Bytecodebefehle
6
Bytecode (Bsp)
7
Bytecode (Bsp)
8
Bytecode (Bsp)
9
Aufbau einer class-Datei
10
Programmcode
?
Bytecode
11
Scanner, Parser, ...
Was javac macht
Lexical Scanner
Parser
Syntaxbaum
Sub-Routine des Parsers
Recursive-descent parser
Ausgabe des Parsers
...
12
Codebeispiel Scanner
13
Codebeispiel Scanner
14
15
Codebeispiel Parser
16
Codebeispiel JCCompilationUnit
17
Codebeispiel JCCompilationUnit
Gibt Baum auf höchstem Level zurück
18
Übersicht: Interface-Vererbung im package
com.sun.tools.javac.tree
19
Übersicht: Interface-Vererbung im package
com.sun.tools.javac.tree
20
Übersicht: Interface-Vererbung im package
com.sun.tools.javac.tree
21
Semantische Analyse
Wie wird dies im Javac erkannt?
22
Visitor-Pattern
●
●
●
●
●
Auf Objektstruktur erfordert Erweiterung von (nicht miteinander verwandter)
Operationen eine Erweiterung aller Klassen
Visitor-Pattern lagert Operationen auf Objektstruktur in externe Visitor aus
Neue Operationen lassen sich leicht durch die Definition neuer Visitor
hinzufügen
Verwandte Operationen werden im Visitor zentral verwaltet und von
besucherfremden Operationen getrennt
Visitor können über mehreren Klassenhierarchien arbeiten
23
Visitor-Pattern (UML)
24
Visitor-Pattern im Java-Compiler (exem.)
25
TreeScanner
●
Ist ein Visitor
●
Scannt rekursiv von oben nach unten und links nach rechts durch den Baum
26
TreeTranslator
Bietet Möglichkeit, Knoten zu ersetzen
27
Typkonvertierung
28
Optimierungen
●
Keine Optimierungen auf Bytecode-Ebene
●
Aber: in der semantischen Analyse
●
Invarianten?
●
Schlecht geschriebener Code?
29
Optimierungsbeispiel I
30
Optimierungsbeispiel II
31
Optimierungsbeispiel III
32
Referenzen
●
●
Source Code des javac-Compilers: http://openjdk.java.net/groups/compiler
„Understanding bytecode makes you a better programmer“
http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/
●
Buch „Compiler – Prinzipien, Techniken und Werkzeuge“ Aho, Lam, Sethi, Ullman
●
Universität Hannover, Compiler-Bau Labor Unterlagen, jvm-1.pdf (JVM und JBC)
●
Untersuchung des Compilers zum Java 6 Release, Bachelorarbeit, Grenz, Lindenberg
●
www2.informatik.uni-erlangen.de/Lehre/WS200304/Java_Sem/vortraege/13bytecode.ppt
●
http://www.javaworld.com/javaworld/jw-09-1996/jw-09-bytecodes.html
●
Wikipedia (DE) Compiler, Visitor Pattern
●
Wikipedia (EN): Java bytecode, Java Compiler, javac, Java Virtual Machine
33
Herunterladen