JVM---数据存储和访问(字节码)

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)构成。
引申------操作数栈还是寄存器的架构区别。
操作码的长度为一个字节(0~255)
如果要将一个16位长度的无符号整数使用两个无符号字节存储起来(将它们命名为byte1和byte2),对应的值
(byte1 << 8)| byte2
如果不考虑异常处理,那么Java虚拟机的解释器可以用这个伪代码来理解他的执行原理过程

do{
自动计算PC寄存器的值加1
根据PC寄存器的指示位置,从字节码流中取出操作码;
if(字节码存在操作数)从字节码流中取出操作数;
执行操作码所定义的操作
}while(字节码流长度 > 0)

一、字节码与数据类型

iload指令----》从局部变量表中加载int型的数据到操作数栈。
long-lload,short-sshort,其余同理

arraylength指令,没有代表数据类型的特殊字符,但是操作数永远只能是一个数组类型的对象。还有另外一些指令,如无条件跳转指令goto则是与数据类型无关的。

二、加载和存储指令

在这里插入图片描述
在这里插入图片描述

三、运算指令

没有直接支持byte/short/char/boolean的统一使用int代替
在这里插入图片描述
在这里插入图片描述

四、类型转换指令

小范围类型向大范围类型的安全转换
在这里插入图片描述
大范围到小范围的窄化
在这里插入图片描述

我们经常会遇到在转换的时候由于数值过大而导致上限溢出,下限溢出和精度丢失等情况。但是永远不可能导致虚拟机抛出运行时异常。

五、对象创建与访问指令

在这里插入图片描述

六、操作数栈管理指令

在这里插入图片描述

七、控制转移指令

在这里插入图片描述
各种类型的比较最终都会转化为int类型的比较操作,int类型比较是否方便完善就显得尤为重要。所以Java虚拟机提供的int类型的条件分支是最为丰富和强大的。

八、方法调用和返回指令

在这里插入图片描述
在这里插入图片描述

九、异常处理指令

十、同步指令

虚拟机的指令集monitorenter和monitorexit两条指令来支持synchronized
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小诚信驿站

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

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

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

打赏作者

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

抵扣说明:

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

余额充值