jvm

JVM指令

2017-04-05  本文已影响0人  Cajesse佳泽

JVM 指令

指令由一个字节长度的,代表着某种特定操作含义的数字(操作码)以及跟随其后若干个代表此操作所需参数(操作数)而构成,大多数没有操作数;
操作码的长度为1个字节. 所以指令集的操作码总数不超过256条
指令助记符是为了方便阅读指令而语义化的一些符号
比如00000001的指令的助记符为iload;


字节码与数据类型

分类

加载和存储指令

指令助记符中 xxx_<n>是操作数为n时的xxx,他们省略掉了显式的操作数,不需要进行去操作数的动作,实际上操作数就隐含在指令中

如下的代码
    int a = 1;
    int b = 2;
    int c = 1;
    int d = 5;
    double x = 44.1;
编译之后的指令为:
    0: iconst_1     // 加载int类型的1
    1: istore_1     // 存储到slot编号为1的局部变量
    2: iconst_2     // 加载int类型的2
    3: istore_2     // 存储到slot编号为2的局部变量
    4: iconst_1    
    5: istore_3
    6: iconst_5     // 加载int类型的5
    7: istore        4    //已经没有省略操作数的istore可用,所以用istore 4
    9: ldc2_w        #9                  // double 44.1d 位于常量池
   12: dstore        5
   14: return

运算指令

a = a+b; // iadd
a = a-b; // isub
a = a*b; // imul
a = a/b; // idiv
a = a%b; // irem
a = a|b; // ior
a = a&b; // iand
a = a^b; // ixor
a = a>>>b; //iushr
a = a>>b; //ishr
a = a<<b; //ishl
a++; //iinc

类型装换指令

对象创建与访问指令

操作数栈管理指令

控制转移指令

方法调用和返回指令

异常处理指令

同步指令

上一篇下一篇

猜你喜欢

热点阅读