JVM学习笔记二(字节码文件分析)

字节码文件结构是一组8位字节为基础的二进制流,个数据项目严格按照顺序排列,美誉任何的分隔符,有两种最基本的数据类型来表示字节码文件格式:无符号数 、 表。

整个字节码文件本质上就是一张表,由下面几个部分组成:

一个完整的表划分为七个部分,这七个部分组成一个完整的class字节码文件:

· 魔数与Class文件版本

· 常量池

· 访问标志

· 类索引、父类索引、接口索引

· 字段表集合

· 方法表集合

· 属性表集合

1、魔数与Class文件版本

各版本JDK的十六进制版本号信息:

 

2、常量池 u2

紧跟版本信息之后的是常量池信息,其中2个字节表示常量池个数,其后不定长数据表示常量池的具体信息。

Java虚拟机规范中一共有14cp_info类型的表结构

 

上面的cp_info表结构有不同的数据结构:

 

tips:javap -verbose 名称.class 时,控制台会打印出该class文件的构成信息。

3、访问标志 u2

在常量池结束之后,紧接着的两个字节代表类或者接口的访问标记。字节码文件中的标志是多个值进行或运算的结果。

4、类索引 u2、父类索引 u2、接口索引 u2

在访问标记之后,则是类索引、父类索引、接口索引的数据。

类索引:用于确定该类的全限定名,值是几就指向常量池的第几个常量;

父类索引:用于确定这个类的父类的全限定名,值是几就指向常量池的第几个常量;

接口索引: 接口索引集合就用来描述哪个类实现了哪些接口,这些被实现的接口将按 implements 语句(如果这个类本身就是一个                     接口,则应当是extends语句)后的接口顺序从左到右排列在接口索引集合中。对于接口索引集合,入口第一项是 u2类                     型的数据为接口计数器(interfaces_count),表示索引表的容量,而在接口计数器后则紧跟着所有的接口信息。

5、字段表集合 u2

描述接口或者类中声明的变量。这里说的字段是类的变量和实例级的变量,不包括方法中的变量。

field_info表数据结构:

6、方法表集合 u2

在字段表后饿2个字节是一个方法计数器,表示类中有几个方法,后面是具体的方法数据。

method_info表数据结构:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值