从零开始写JVM(5):Class文件结构轮廓

之前已经得到了class文件的二进制码,那么jvm是以什么格式去解析这份二进制码的呢?

class文件是以以下的格式进行数据类型的存放:

classFile {

         u4                magic;

         u2                minor_version;

         u2                major_version;

         u4                 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虚拟机规范定义了u1,u2和u4三种数据类型,来表示1,2和4字节无符号整数。

先有个大体的概念:

           1.前4个字节,魔数~ (0Xca fe ba be),它唯一的作用是 确定这个文件是否为一个被虚拟机接受的Class文件。

           2.接下来的第5个和第6个 字节是次版本号   第7和第8个字节是主版本号 。

           3.常量池个数,以及常量池的信息(信息较多,下一章单独再分析)

           4.访问标志

           5.类索引,父类索引与接口索引集合

           6.字段表集合

           7.方法表集合

           8.属性表集合

 

对于  constant_pool, interfaces , fields, methods ,attributes可以暂时理解成一种特殊的bean,其中还有很多的特定的字段。具体的结果,之后再逐个分析。接下来我们的任务就是讲class二进制根据这个大体结构,分析一遍先~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值