java 字节码操作_JAVA字节码的应用实例,长见识了

虽然许多字节码很简单,但上面的上半行中的字节很复杂且具体到Java。字节码的长度是一到五字节,因此它们的名字Java助记符使用前缀是32位是整数,A为参考地址,S为16位整数(短),和乙8位字节。我们使用是对于一个16位常量的8位常数和II6。RISC-V使用操作数的寄存器,但JVM使用堆栈。编译器知道每个方法的操作数堆栈的最大最小值,并为其分配简单的空间。

a485fbb04e352fa36490e4149d2316c9.png

在当前帧中。这里是符号意义栏,下一个位置网络操作系统是去除操作。

由JVM创建的类的常量池,以及框架是指局部方法框架的变量。从里面丢失的Java字节码是一些算术和逻辑运算符,还有一些棘手的堆栈管理,与0和分支相比,支持分支表,类型转换,是更多复杂的Java特定指令的变体,加上浮点数据、64位整数(long)和16位字符的操作。

1b248459cf641c6c4210e1a592144c30.png

Java编译

由于Java源自C,Java具有与C相同的内置类型,所以赋值语句示例在Java中与C中相同。

Java版本的编译,虽然他们的循环是不同的。C的设计者留给程序员确保他们的代码不超过数组界限。Java的设计者想要捕捉数组绑定的bug,因此需要编译器检查这些违规行为。为了检查边界,编译器需要知道它们是什么。Java在每个数组中包含一个额外的双字,它包含上界。下界定义为0。

38d561ce4cd4cabb0dddda7cbad0e694.png

编译——Java中的循环示例

修改RISC-V代码虽然在循环内已经包含Java所需的数组边界检查。假设数组的长度刚好位于数组的第一个元素之前。

让我们假设Java数组在数据启动之前保留了数组的前两个单词。我们很快就会看到第一个双字的用法,但是第二个双字有数组长度。在进入循环之前,让我们把数组的长度加载到一个临时寄存器中: 数组保存长度在我们乘法之前,我们必须测试它是否小于或大于数组的最后一个元素。

633ec6387505eea5b5baa1604fa42972.png

由于数组从0开始,最后一个数组元素的索引小于数组的长度。因此,对上数组约束的测试是肯定的。因此,第二步是测试大于或等于等于分支的长度。

错误的RISC-V的下两行虽然循环与C版本没有变化,但我们需要解释在Java中保留的数组的前16个字节。我们通过将负载的地址字段从0变为16来实现这一点。RISC-V代码的其余部分虽然循环很好,但要用Java调用方法。

编译器根据对象的类型选择适当的方法。在少数情况下,它是明确的,并且可以在不超过C过程的开销的情况下调用该方法。

bff083604261502817c62f6413a67a5f.png

今天的介绍就到这里了,怎么样,是不是很长见识呢?喜欢就请留言吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值