原创

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://xiaochengxinyizhan.blog.csdn.net/article/details/86615064

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
在这里插入图片描述

文章最后发布于: 2019-01-23 17:54:46
展开阅读全文
0 个人打赏

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览