JVM指令集理解

本文详细解析了Java字节码指令集,包括常量加载、局部变量操作、算术运算、控制转移、方法调用等核心指令的功能及使用场景,帮助读者深入理解Java虚拟机的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.凡是带const的表示将什么数据压操作数栈。

  如:iconst_2 将int型数据2压入到操作数栈

  aconst_null  将null值压入栈。

2.bipush和sipush  表示将单字节或者短整形的常量值压入操作数栈。

3.带ldc的表示将什么类型数据从常量池中压入到操作数栈。

  如:ldc_w  将int或者flat或者string类型的数据压入到操作数栈。(宽索引)

        ldc2_w  将long或者double类型的数据压入到操作数栈。(宽索引)

4.凡是带load的指令表示将某类型的局部变量数据压入到操作数栈的栈顶。

   如:iload   表示将int类型的局部变量压入到操作数栈的栈顶。

         aload  以a开头的表示将引用类型的局部变量压入到操作数栈的栈顶。

         iload_1 将局部变量数组里面下标为1的int类型的数据压入到操作数栈。

         iaload   将int型数组的指定索引的值压入到操作数栈。

5.凡是带有store指令的表示将操作数栈顶的某类型的值存入指定的局部变量中。

   如:istore  表示将栈顶int类型的数据存入到指定的局部变量中。

         istore_3  表示将栈int类型的数据存入到局部变量数组的下标为3的元素中。

6.pop  将栈顶数据弹出。pop2将栈顶的一个long或者double数据从栈顶弹出来。

7.dup  复制栈顶的数据并将复制的值也压入到栈顶。

   dup2  复制栈顶一个long或者是double的数据并将复制的值也压入到栈顶。

8.swap  将栈最顶端的两个值互换。

9.iadd 将栈顶两个int型的数据相加然后将结果再次的压入到栈顶。

   isub 将栈顶两个int型的数据相减然后将结果再次的压入到栈顶。

   imul 将栈顶两个int型的数据相乘然后将结果再次的压入到栈顶。

   idiv  将栈顶两个int型的数据相除然后将结果再次的压入到栈顶。

   irem 将栈顶两个int型的数据取模运算然后将结果再次的压入到栈顶。.

   ineg 将栈顶的int数据取负将结果压入到栈顶。

 

   iinc  将指定的int变量增加指定值(i++,i--,i+=2)

   i2l   将栈顶int类型数据强制转换成long型将结果压入到栈顶。

   lcmp  将栈顶两long型数据的大小进行比较,并将结果(1,0,-1)压入栈顶。

10。以if开头的指令都是跳转指令。

11。tableswitch、lookupswitch  表示用switch条件跳转。

12。ireturn  从当前方法返回int型数据。

13。getstatic  获取指定类的静态域,将将结果压入到栈顶。

       putstatic 为指定的类的静态域赋值。

       getfield   获取指定类的实例变量,将结果压入到栈顶。

       putfield   为指定类的实例变量赋值。

       invokevirtual  调用实例方法。

       invokespacial  调用超类构造方法,实例初始化方法,私有方法。

       invokestatic  调用静态方法。

       invokeinterface  调用接口方法。

       new 创建一个对象,并将其引用压入到栈顶。

       newarray  创建一个原始类型的数组,并将其引用压入到栈顶。

       arraylength   获得一个数组的长度,将将结果压入到栈顶。

       athrow   将栈顶的异常抛出。

       checkcast  检验类型转换,转换未通过,将抛出ClassCastException.

       instanceof 检验对象是否是指定的类的实例,如果是将1压入栈顶,否则将0压入栈顶

       monitorenter   获得对象的锁,用于同步方法或同步块  

       monitorexit    释放对象的锁,用于同步方法或同步块

       ifnull    为null时跳转

       ifnonnull   不为null时跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值