Beispiel -- Java Virtual Machine

Werbung
Beispiel – Java Virtual Machine
Dr.-Ing. Volkmar Sieh
Department Informatik 3: Rechnerarchitektur
Friedrich-Alexander-Universität Erlangen-Nürnberg
WS 2010/2011
Beispiel – Java Virtual Machine– 1/11– 2010-09-06
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
Beispiel – Java Virtual Machine– 2/11– 2010-09-06
Java Virtual Machine – Instruktionen
byte
bipush
baload
bastore
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– 3/11– 2010-09-06
char
reference
caload
castore
aconst
aload
astore
aaload
aastore
Java Virtual Machine – Instruktionen
byte
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
char
Beispiel – Java Virtual Machine– 4/11– 2010-09-06
reference
Java Virtual Machine – Instruktionen
byte
i2b
short
i2s
int
l2i
f2i
d2i
ifOP
if_icmpOP
ireturn
long
i2l
f2l
d2l
lcmp
lreturn
float
i2f
l2f
double
i2d
l2d
f2d
char
reference
d2f
fcmpl
fcmpg
dcmpl
dcmpg
freturn
dreturn
Beispiel – Java Virtual Machine– 5/11– 2010-09-06
if_acmpOP
areturn
Java Virtual Machine – Instruktionen
new
getfield
arraylength
pop
dup_x1
ifeq
ifgt
if_icmpeq
if_icmple
tableswitch
jsr
invokevirtual
athrow
monitorenter
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
invokestatic
monitorexit
Beispiel – Java Virtual Machine– 6/11– 2010-09-06
swap
Java Virtual Machine – Instruktionen – Beispiel
// a = -(b
...
iload_1
iload 20
iadd
ineg
istore_2
...
+ c);
//
//
//
//
//
push variable 1
push variable 20
add variables
negate result
pop as variable 2
Beispiel – Java Virtual Machine– 7/11– 2010-09-06
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
Beispiel – Java Virtual Machine– 8/11– 2010-09-06
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
Beispiel – Java Virtual Machine– 9/11– 2010-09-06
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.
Beispiel – Java Virtual Machine– 10/11– 2010-09-06
Java Virtual Machine
Lizenz: „kostenlos”
Mehr Infos unter
Allgemeines: http://java.sun.com
JVM Interna: http://java.sun.com/docs/books/jvms/index.html
Beispiel – Java Virtual Machine– 11/11– 2010-09-06
Herunterladen