首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java类文件规范语句

Java类文件规范语句
EN

Stack Overflow用户
提问于 2016-10-08 18:11:38
回答 1查看 75关注 0票数 0

Java类文件规范声明:

代码数组给出实现该方法的Java虚拟机代码的实际字节。 当代码数组被读取到字节可寻址机器上的内存中时,如果数组的第一个字节在4字节边界上对齐,表开关和查找开关32位偏移将对齐4字节。(有关代码数组对齐的影响的更多信息,请参阅这些指令的说明。) (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.3)

我该如何解释这句话呢?

这两个说明的维基百科页面提到了以下内容:(listings)

表--其他字节:

4+:0-3字节填充,defaultbyte1,defaultbyte2,defaultbyte3,defaultbyte4,lowbyte1,lowbyte2,lowbyte3,lowbyte4,highbyte1,highbyte2,highbyte3,highbyte4,跳转偏移.

查找切换额外字节:

4+:<0-3字节padding>,defaultbyte1,defaultbyte2,defaultbyte3,defaultbyte4,npairs1,npairs2,npairs3,npairs4,匹配偏移对.

我认为<0-3字节的padding>与类文件规范语句相关,我只是不知道具体情况如何。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-08 18:41:02

表开关和查找开关指令被定义为有0到3个字节的填充,这取决于它们在方法字节码中的偏移量。填充物的实际定义见第6.5节,其中列出了每条指令的格式。

在查找开关操作码之后,0到3个字节之间必须充当填充,这样defaultbyte1从当前方法的开始(其第一条指令的操作码)开始的地址是四个字节的倍数。

您突出强调的语句解释了这种设计选择的动机,否则可能会显得奇怪或毫无意义。

这样可以更有效地实现Java解释器,因为如果代码以4字节对齐地址加载,则可以通过对齐访问来读取开关表中的偏移量和键。

当然,现在它并不那么重要,因为我们有漂亮的JIT,但是在Java的早期,JVM很可能是作为一个简单的解释器实现的,这将在性能上产生很大的差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39935699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档