JVM 之 class文件
目录
class文件
一个二进制流文件。各个数据严格按照顺序排列,中间没有添加任何分隔符。以字节为单位(8bit)。
如果遇到8bit以上的空间的数据项,则会按照高位在前的方式分割成若干个字节进行存储。
class文件中有两种数据类型:无符号数和表
class文件信息
1.魔数
大小:
四个字节
内容:
CAFEBABE
作用:
区分文件类型。JVM开始读取的地方。
2.class文件版本
四个字节为JDK版本。jdk1.8为52,大于52,就是jdk版本大于1.8。
3.常量池
长度:2字节
数据结构:
CP_info
带图片的解释示例
工具查看:
javap -verbose hello.class
4.访问标志
长度:2字节
类型:
interface默认会加一个abstract
5.类索引,6.父类索引
单继承,所以只有一个
长度:2字节
指向常量池的位置
0001 表示指向常量池中第一个位置
7.接口索引集合
长度:2字节
作用:元素个数
内容索引长度: 2字节
指向常量池中对应的位置
8.字段表集合
用于描述接口或者类中声明的变量
长度:2字节
作用:字段数量
field_info,用到常量池
对象类型加L
数组加[
对象数组[L
带图解释示例
9.方法表集合
长度:2字节
作用:方法数量
类似于字段表,但是只存储方法标签,具体方法体存在属性表的code属性中
带图解释示例
10.属性表集合
长度:2字节
作用:属性个数
其中有预定义字段和自定义字段
带图解释示例
class文件设计理念及意义
1.面向接口编程(提出规范,实现由服务提供者编写)
2.最终使用字节码在JVM运行,与平台无关。通过自定义编程语言和编译器,生成符合规范的字节码就可以在JVM中运行。
类似于用c++写代码时,使用自定义报文格式解析报文一样。