常见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                 返回方法命令

 

运算  (相应的 可以替换为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)

 

以上是关于常见JVM虚拟机指令的主要内容,如果未能解决你的问题,请参考以下文章

Java 虚拟机 ( JVM ) 概述

读《jvm虚拟机》- 对象创建过程

Java虚拟机详解01----初识JVM

Java虚拟机(JVM)概述

jvm 虚拟机字节码指令表(转)

JVM虚拟机指令