常见JVM虚拟机指令

基本常用

new            创建一个对象并将地址放入虚拟机栈

dup             复制一个对象地址放入虚拟机栈

invokespecial            用于调用私有方法及final方法

invokevirtual            用于调用普通的需要动态加载的方法

invokestatic             用于调用静态方法

invokeinterface    用于调用接口方法

pop             将上面执行的最近的栈帧弹出栈

istore_0                将上面执行最近的引用地址放入局部变量表第零个槽位(相应的 i 可以替换为s,l,f,d,a,ia,ba,sa,la,fa,da,ca,aa,分别指代int,short,long,float,double,引用类型,int数组,boolean数组,short数组,long数组,float数组,double数组,char数组,引用类型数组)

iload_1                  将局部变量表中第一个槽位的值或地址放入虚拟机栈(相应的 i 可以替换为s,l,f,d,a,ia,ba,sa,la,fa,da,ca,aa,分别指代int,short,long,float,double,引用类型,int数组,boolean数组,short数组,long数组,float数组,double数组,char数组,引用类型数组)

iconst_1    当int取值-1~5时,取一个常量放入虚拟机栈(相应的前面的i:int类型,可替换为除了byte的其它几种基本数据类型)。

bipush               int取值-128~127时, 认为是一个byte类型的值放入虚拟机栈

sipush              当int取值-32768~32767时,认为是short类型的值放入虚拟机栈。

ldc              当int取值-2147483648~2147483647时,认为是一个long类型的值放入虚拟机栈中。

return                 返回方法命令

运算  (相应的 可以替换为s,l,f,d,分别指代int,short,long,float,double)

iadd       int类型的加法

isub       int类型的减法

imul       int类型的乘法

idiv        int类型的除法

irem       int类型的除法的余数

ineg        int类型的取反操作

iinc         int类型的本身加上一个常量

流程控制 (相应的 可以替换为s,l,f,d,a,分别指代int,short,long,float,double,对象引用)

ifeq     是否等于0


ifne     是否不等于0


iflt       是否小于0

ifge       是否大于等于0


ifgt       是否大于0


ifle       是否小于等于0


if_icmpeq     判断两个值是否相等


if_icmpne     判断两个值是否不相等


if_icmplt     判断先入栈的是否小于后入栈的

if_icmple     判断先入栈的是否小于等于后入栈的

if_icmpge     判断先入栈的是否大于等于后入栈的


if_icmpgt    判断先入栈的是否大于后入栈的


ifnull       判断是否为null


ifnonnull     判断是否不为null

比较

lcmp 比较两个值long类型值

fcmpl 比较float类型值(当遇到NaN时,返回-1)


fcmpg 比较float类型值(当遇到NaN时,返回1)


dcmpl 比较double类型值(当遇到NaN时,返回-1)


dcmpg 比较double类型值(当遇到NaN时,返回1)

猜你喜欢

转载自www.cnblogs.com/pastjx/p/12509420.html