JVM助记符

mac2022-06-30  24

JVM助记符: ldc:表示将int,float或者String类型的常量值从常量池中推送至栈顶 bipush:表示将单字节byte(-128 – 127)的常量值推送至栈顶; sipush :表示将一个短整型short(-32768 – 32767) 的常量值推送至栈顶; iconst_1 :表示将int类型的1推送至栈顶(iconst_m1 – iconst_5),iconst_m1表示 -1 anewarray :创建一个引用类型(如类,接口,数组)的数组,并将其引用值压入栈顶 newarray : 创建一个基本类型(如int,float,short,byte等)的数组,并将其引用值压入栈顶 new:创建新的对象,并将其压入栈顶 dup:将栈顶元素复制一份再压入栈顶(如Object obj = new Object(),在new 指令后会有一个dup指令,因为new指令在堆上为对象分配了内存空间后,会将对上的内存地址压入操作数栈,但是后续会跟着调用方法,这里会使用该内存地址对对象进行初始化,然后pop出栈,同时还会将对象的内存地址赋值给obj,所以这里会两次使用堆上的内存地址,如果不执行dup指令,则只有一个地址) astore_n:将引用存储到一个局部变量中,并存放在局部变量表中索引为n的位置 aload_n:从局部变量表索引为n的位置加载一个引用 istore_n:同astore_n,表示int类型 iload_n:同aload_n,表示int类型 pop : 将操作数栈最顶层的数据弹出 invokespecial:调用自己的私有方法、构造方法()以及父类的方法 invokeinterface:jdk1.8之后引入的;调用接口中的方法,实际上是在运行期决定的,决定到底调用实现该接口的哪个对象的特定方法。 invokestatic :调用静态方法 invokevirtual:调用虚方法。Java语言中是不存在的,但是在字节码中存在,运行期动态查找的过程 invokedynamic:动态调用方法。jdk1.7引入的,如调用JavaScript的方法

最新回复(0)