当前位置: 首页 > 知识库问答 >
问题:

Java类文件规范语句

唐增
2023-03-14

Java类文件规范规定:

代码数组给出了实现该方法的Java虚拟机代码的实际字节。

当代码数组读入字节可寻址机器上的内存时,如果数组的第一个字节在4字节边界上对齐,那么表开关和查找开关32位偏移量将是4字节对齐的。(有关代码数组对齐结果的更多信息,请参阅这些说明的说明。)(https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.3)

我该如何解释这句话?

这两条说明的维基百科页面提到:(https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings)

表切换附加字节:

4:[0–3字节填充]、defaultbyte1、defaultbyte2、defaultbyte3、defaultbyte4、lowbyte1、lowbyte2、lowbyte3、lowbyte4、highbyte1、highbyte2、highbyte3、highbyte4、跳转偏移量。。。

Lookupswitch附加字节:

4:

我认为是

共有1个答案

陶锋
2023-03-14

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

紧跟在lookupswitch操作码之后,0到3个字节之间必须充当填充,这样defaultbyte1从一个地址开始,该地址距离当前方法(其第一条指令的操作码)的开头是4个字节的倍数。

您突出显示的声明解释了这种设计选择的动机,否则这可能看起来很奇怪或毫无意义。

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

当然,这在今天已经不那么重要了,因为我们有很好的JIT,但在Java的早期,JVM可能是作为一个幼稚的解释器实现的,这将在性能上产生巨大的差异。

 类似资料:
  • 问题内容: 在.properties文件中,我可以在第一个字符之后使用字符’=’吗? 像这样: 是否允许?如果确实允许,我在哪里可以知道允许? 到目前为止,它似乎仍然有效,但我不太确定它以后是否会失效。 问题答案: 您可以在和之前放置反斜杠转义字符。 或者最好使用下面的代码来打印出如何 转义 您的财产: 输出: 另外,请查看Java API信息

  • Mock.js 的语法规范包括两部分: 数据模板定义规范(Data Template Definition,DTD) 数据占位符定义规范(Data Placeholder Definition,DPD) 数据模板定义规范 DTD 数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值: // 属性名 name // 生成规则 rule // 属性值 value 'name|r

  • 为保证文档课件在云直播中流畅稳定的使用,请您遵照下列规范制作课件。 一、PPT演示文稿课件 制作PPT课件请使用Microsoft Office 2013或以上版本,低版本容易导致部分内容无法转换,不支持其他办公软件制作的PPT,如WPS、Keynote等; 建议PPT课件整体大小不超过10MB,PPT单页大小不超过200KB(包含文字、图片和文件等所有元素),PPT课件过大易导致加载缓慢或失败,

  • 这些插件添加了可以被编译并在JVM中执行的各种语言的支持 Table 22.1. Language plugins Plugin Id 自动应用 协同工作 描述 java java-base - 为项目添加java编译,测试及绑定能力,作为许多Gradle插件的基础.参见Chapter 7, Java Quickstart groovy java, groovy-base - 为Groovy项目构

  • PHP 语言规范,Facebook 已经把所有该规范的版权贡献给献给 CC0 公共域协议,本规范的发布不提供任何保证,Facebook 公司在 2014 年发起该项目。

  • var关键字 总是用 var 关键字定义变量。 描述 如果不显式使用 var 关键字定义变量,变量会进入到全局上下文中,可能会和已有的变量发生冲突。另外,如果不使用var声明,很难说变量存在的作用域是哪个(可能在局部作用域里,也可能在document或者window上)。所以,要一直使用 var 关键字定义变量。 常量 使用字母全部大写(如 NAMES_LIKE_THIS )的方式命名 可以使用