常见JVM虚拟机指令
Posted pastjx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见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 返回方法命令
运算 (相应的 i 可以替换为s,l,f,d,分别指代int,short,long,float,double)
iadd int类型的加法
isub int类型的减法
imul int类型的乘法
idiv int类型的除法
irem int类型的除法的余数
ineg int类型的取反操作
iinc int类型的本身加上一个常量
流程控制 (相应的 i 可以替换为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)
以上是关于常见JVM虚拟机指令的主要内容,如果未能解决你的问题,请参考以下文章