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