什么是字节码?

作者: 奔跑的蛙牛 | 来源:发表于2018-08-26 18:08 被阅读374次

什么是字节码

字节码(Byte-code)是一种包含执行程序,由一序列 op 代码/数据对组成的二进制文件,是一种中间码。字节是电脑里的数据量单位。

字节码文件展示

image.png

首先了解一张图 java字节码总览图

image.png

魔数 四个字节

首先讲一下魔数占四个字节对应 上图demo.class 0Xcafe babe表示java的class文件。好奇的你发现 cafe babe 约等于下张图


image.png

版本号 4个字节

对应demo 0X0000 0033 其中前面的0000是次版本号,后面的0033是主版本号。通过进制转换得到的是次版本号为0,主版本号为51

常量池

紧接着主版本号之后的就是常量池入口。常量池是Class文件中的资源仓库,在接下来的内容中我们会发现很多地方会涉及,如Class Name,Interfaces等。常量池中主要存储2大类常量:字面量和符号引用。字面量如文本字符串,java中声明为final的常量值等等,而符号引用如类和接口的全局限定名,字段的名称和描述符,方法的名称和描述符。

  • 0×0015:由于常量池的数量不固定(n+2),所以需要在常量池的入口处放置一项u2类型的数据代表常量池数量。因此该16进制是21,表示有20项常量,索引范围为1~20。明明是21,为何是20呢?因为Class文件格式规定,设计者就讲第0项保留出来了,以备后患。从这里我们知道接下来我们需要翻译出20项常量。
image.png

Constant #1 (一共有20个常量,这是第一个,以此类推…)
0x0a-:从常量类型表中我们发现,第一个数据均是u1类型的tag,16进制的0a是十进制的10,对应表中的MethodRef_info。
0x-00 04-:Class_info索引项#4
0x-00 11-:NameAndType索引项#17

Access_Flag 访问标志

访问标志信息包括该Class文件是类还是接口,是否被定义成public,是否是abstract,如果是类,是否被声明成final。通过上面的源代码,我们知道该文件是类并且是public。


Access_Flag.png

后续可以参考java程序如何按照字节码翻译

相关文章

  • 什么是字节码?

    什么是字节码 字节码(Byte-code)是一种包含执行程序,由一序列 op 代码/数据对组成的二进制文件,是一种...

  • 什么是字节码?采用字节码的好处是什么?

    什么是字节码?采用字节码的好处是什么? 在 Java 中,JVM可以理解的代码就叫做字节码(即扩展名为 .clas...

  • JVM

    什么是字节码?采用字节码的好处是什么? 在 Java 中,JVM可以理解的代码就叫做字节码(即扩展名为 .clas...

  • JAVA基础-什么是字节码?采用字节码的好处是什么?

    什么是字节码?采用字节码的好处是什么? 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .cla...

  • 可爱的字节码&修改

    1.为什么要修改字节码 字节码是java多平台运行的根本原因,程序运行的状态和结果都由字节码决定。所以控制了字节码...

  • Java 字节码

    什么是Java字节码? Java 字节码执行的过程 字节码在执行的时候有两个区,一个本地变量区(LocalVari...

  • 22. java虚拟机总结-从栈帧看字节码 (五)

    怎么查看字节码文件?字节码文件长什么样子?对象初始化之后,具体的字节码又是怎么执行的? 查看字节码的工具 java...

  • 详解 JVM 字节码(2)

    什么是字节码,为什么需要字节码编译 JVM 编译成机器码, 我们看一看 Java 编译过程 java 源码 编译为...

  • java字节码解读

    什么是字节码文件 字节码文件就是以字节(1字节=8位)为最小存储单位的文件;我们平常开发的java代码,其存储文件...

  • 字节码引用检测原理与实战

    一、字节码与引用检测 1.1 Java字节码 本章中的字节码重点研究Java 字节码,Java字节码(Java b...

网友评论

    本文标题:什么是字节码?

    本文链接:https://www.haomeiwen.com/subject/pcioiftx.html