java vm 文件_Java虚拟机类文件结构

代码(code):*.java 文件

字节码(byte-code):*.class文件,在Java中由代码(*.java) 文件经过javac编译器编译后生成的产物,在JVM(java虚拟机)识别并执行,与硬件平台无关,内容为01

【其他语言也可以由各自编译器编译生产.class文件,并在JVM上运行】

机器码:计算机直接使用的程序语言,其语句就是机器指令码,机器指令码是用于指挥计算机应做的操作和操作数地址的一组二进制数。【百度百科】

1)Little-endian:将低序字节存储在起始地址(低位编址)

2)Big-endian:将高序字节存储在起始地址(高位编址)

class文件结构

class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据:无符号数 和 表。解析就以这两种数据类型为基础。

无符号数属于基本的数据类型,以u1、u2、u3、u4来分别表示1个字节、2个字节、4个字节、8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8 编码构成的字符串值。

表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以“_info” 结尾。表用于描述有层次关系的复合结构的数据,整个Class文件本质上就是一张表~

ClassFile {

u4 magic;  // 魔法数字,表明当前文件是.class文件,固定0xCAFEBABE

u2 minor_version; // Class文件的副版本和主版本

u2 major_version; // Class文件的主版本

u2 constant_pool_count; // 常量池计数

cp_info constant_pool[constant_pool_count-1];  // 常量池内容

u2 access_flags; // 类访问标识

u2 this_class; // 当前类

u2 super_class; // 父类

u2 interfaces_count; // 实现的接口数

u2 interfaces[interfaces_count]; // 实现接口信息

u2 fields_count; // 字段数量

field_info fields[fields_count]; // 包含的字段信息

u2 methods_count; // 方法数量

method_info methods[methods_count]; // 包含的方法信息

u2 attributes_count;  // 属性数量

attribute_info attributes[attributes_count]; // 各种属性

}

常量池中主要存放两大常量:字面量和符号引用

字面量比较接近于Java语言层面的常量概念,如文本字符串、声明为 final 的常量值等。

符号引用包括下面三类常量:

1、类和接口的全限定名

2、字段的名称和描述符

3、方法的名称和描述符

常量池中的每一项常量都是一个表~

具体内容只看了大概,就不讨论了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值