字节码指令分类

字节码指令大致分为九类:

一:加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈之间来回传输

二:算术指令用于对两个操作数栈上的值进行某种特定运算,并把结果重新存入到操作栈顶。运算指令可以分为两种:对整型数据进行运算的指令与对浮点型数据进行运算的指令;无论是哪种算术指令,均是使用Java虚拟机的算术类型来进行计算的,换句话说是不存在直接支持byte、short、char和boolean类型的算术指令,对于上述几种数据的运算,应使用操作int类型的指令代替

三:类型转换指令可以将两种不同的数值类型相互转换,这些转换操作一般用于实现用户代码中的显式类型转换操作,或用来处理字节码指令集中数据类型相关指令无法与数据类型一一对应的问题

小范围向大范围安全转换,窄化类型转换必须显示的使用转换指令,即强转

四:对象创建与访问指令,类实例和数组的创建与操作使用了不同的字节码指令。对象创建后,就可以通过对象访问指令获取对象实例或者数组实例中的字段或者数组元素(创建类实例、创建数组、访问类字段(static字段,或者称为类变量)和实例字段、把一个数组元素加载到操作数栈、将一个操作数栈的值储存到数组元素、取数组长度、检查类实例类型等指令)

五:操作数栈管理指令,用于直接操作操作数栈的指令(将操作数栈的栈顶一个或两个元素出栈、将栈最顶端的两个数值互换等指令)

六:控制转移指令可以让Java虚拟机有条件或无条件地从指定位置指令(而不是控制转移指令)的下一条指令继续执行程序(条件分支、复合条件分支、无条件分支)

七:方法调用和返回指令;方法调用指令与数据类型无关,而方法返回指令是根据返回值的类型区分的,包括ireturn(当返回值是boolean、byte、char、short和int类型时使用)、lreturn、freturn、dreturn和areturn,另外还有一条return指令供声明为void的方法、实例初始化方法、类和接口的类初始化方法使用

八:异常处理指令,显式抛出异常的操作;处理异常(catch语句)不是由字节码指令来实现的而是采用异常表来完成

九:同步指令,Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步,都使用管程(就是“锁”)实现;方法级的同步是隐式的,无须通过字节码指令来控制,它实现在方法调用和返回操作之中;同步一段指令集序列通常是由Java语言中的synchronized语句块来表示的,Java虚拟机的指令集中有monitorenter和monitorexit两条指令来支持synchronized关键字的语义,正确实现synchronized关键字需要Javac编译器与Java虚拟机两者共同协作支持

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔布

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值