Beispiel – Java Virtual Machine

Werbung
Beispiel – Java Virtual Machine
Dr.-Ing. Volkmar Sieh
Department Informatik 4
Verteilte Systeme und Betriebssysteme
Friedrich-Alexander-Universität Erlangen-Nürnberg
WS 2014/2015
V. Sieh
Beispiel – Java Virtual Machine (WS14/15)
1 – 11
Java Virtual Machine
„Java Virtual Machine” (JVM): konsequentes Design für hohe
JIT-Performance:
gut spezifizierte, einfache Instruktionen, eine Adressierungsart
leicht emulierbare Instruktionen
kaum Exceptions (nur Div-by-Zero, NULL-Pointer)
keine Interrupts statt dessen Multi-Threading
keine Condition-Code-Flags
keine MMU, keine Segmentierung, sichere Pointer
keine berechneten Sprünge
kein selbst-modifizierender Code
V. Sieh
Beispiel – Java Virtual Machine (WS14/15)
2 – 11
Java Virtual Machine – Instruktionen
byte
bipush
baload
bastore
V. Sieh
short
sipush
saload
sastore
int
long
float
double
iconst
iload
istore
iaload
iastore
lconst
lload
lstore
laload
lastore
fconst
fload
fstore
faload
fastore
dconst
dload
dstore
daload
dastore
Beispiel – Java Virtual Machine (WS14/15)
char
reference
caload
castore
aconst
aload
astore
aaload
aastore
3 – 11
Java Virtual Machine – Instruktionen
byte
V. Sieh
short
int
iinc
iadd
isub
imul
idiv
irem
ineg
ishl
ishr
iushr
iand
ior
ixor
long
float
double
ladd
lsub
lmul
ldiv
lrem
lneg
lshl
lshr
lushr
land
lor
lxor
fadd
fsub
fmul
fdiv
frem
fneg
dadd
dsub
dmul
ddiv
drem
dneg
Beispiel – Java Virtual Machine (WS14/15)
char
reference
4 – 11
Java Virtual Machine – Instruktionen
byte
i2b
short
i2s
int
l2i
f2i
d2i
long
i2l
f2l
d2l
lcmp
float
i2f
l2f
V. Sieh
lreturn
Beispiel – Java Virtual Machine (WS14/15)
char
reference
d2f
fcmpl
fcmpg
ifOP
if_icmpOP
ireturn
double
i2d
l2d
f2d
freturn
dcmpl
dcmpg
dreturn
if_acmpOP
areturn
5 – 11
Java Virtual Machine – Instruktionen
new
getfield
arraylength
pop
dup_x1
ifeq
ifgt
if_icmpeq
if_icmple
tableswitch
jsr
invokevirtual
athrow
monitorenter
V. Sieh
newarray
putfield
instanceof
pop2
dup2_x1
iflt
ifge
if_icmpne
if_icmpge
lookupswitch
jsr_w
invokeinterface
anewarray
getstatic
checkcast
dup
dup_x2
ifle
ifnull
if_icmplt
if_acmpeq
goto
ret
invokespecial
multianewarray
putstatic
dup2
dup2_x2
ifne
ifnonnull
if_icmpgt
if_acmpne
goto_w
swap
invokestatic
monitorexit
Beispiel – Java Virtual Machine (WS14/15)
6 – 11
Java Virtual Machine – Instruktionen – Beispiel
// a = -(b
...
iload_1
iload 20
iadd
ineg
istore_2
...
V. Sieh
+ c);
//
//
//
//
//
push variable 1
push variable 20
add variables
negate result
pop as variable 2
Beispiel – Java Virtual Machine (WS14/15)
7 – 11
Java Virtual Machine – Instruktionen – Beispiel
// for (i = n; i >= 0; i--) { XXX }
iload 4
istore 3
goto L15
L14:
XXX
iinc 3 by -1
L15:
iload 3
ifge L14
V. Sieh
Beispiel – Java Virtual Machine (WS14/15)
8 – 11
Java Virtual Machine – Code-Prüfung
Code-Prüfung: Idee:
Wenn eine bestimmte Code-Zeile ausgeführt wird,
liegen immer die gleichen Typen von Argumente auf dem Stack,
liegen immer die gleichen Typen in den lokalen Variablen.
egal auf welchem Weg die Code-Zeile erreicht wurde.
Es liegen die richtigen Typen von Argumenten auf dem Stack,
wenn eine Rechenoperation ausgeführt wird,
wenn eine Unterprogramm aufgerufen wird.
=> sichere Pointer, kein selbst-modifizierender Code
V. Sieh
Beispiel – Java Virtual Machine (WS14/15)
9 – 11
Java Virtual Machine – Code
JVM Byte-Code wurde als
leicht emulierbarer,
leicht zu compilierender
Code entwickelt.
Er ist ungeeignet für Hardware! Z.B. sind
die Garbage-Collection oder
die Code-Prüfung
praktisch unmöglich in Hardware zu bauen.
V. Sieh
Beispiel – Java Virtual Machine (WS14/15)
10 – 11
Java Virtual Machine
Lizenz: „kostenlos”
Mehr Infos unter
Allgemeines: http://java.sun.com
JVM Interna: http://java.sun.com/docs/books/jvms/index.html
V. Sieh
Beispiel – Java Virtual Machine (WS14/15)
11 – 11
Herunterladen