12. 字节码整体结构

字节码整体结构

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html 官网帮助文档

Java字节码整体结构图

12. 字节码整体结构_第1张图片
3. Java字节码整体结构.png

对于图的解释说明

类型 名称 数量
u4(表示占据4个字节) magic(魔数) 1
u2 minor_version(次版本号) 1
u2 major_version(主版本号) 1
u2 constant_pool_count(常量个数) 1
cp_info constant_pool(常量池表) constant_pool_count-1
u2 access_flags(类的访问控制权限) 1
u2 this_class(类名) 1
u2 super_class(父类名) 1
u2 interfaces_count(接口个数) 1
u2 interfaces(接口名) interfaces_count
u2 fields_count(域个数) 1
field_info fields(域的表) fields_count
u2 methods_count(方法的个数) 1
method_info methods(方发表) methods_count
u2 attributes_count(附加属性的个数) 1
attribute_info attributes(附加属性的表) attributes_count

class字节码数据类型

Class字节码有两种数据类型

  • 字节数据直接量

    这是基本的数据类型。供细分为u1、u2、u4、u8四种,分别代表连续的1个字节、2个字节、4个字节、8个字节组成的整体数据

  • 表(数组)

    表是由多个基本数据或其他表,按照既定顺序组成的大的数据集合。表是由结构的,它的结构体现在:组成表的成分所在的位置和顺序都是已经严格定义好的

用一个数据结构表示

ClassFile {
          u4 magic;
          u2 minor_version;
          u2 major_version;
          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];
}

工具

使用javap -verbose命令分析一个字节码文件时,将会分析该字节码文件的魔数、版本号、常量池、类的构造方法、类中的方法信息、类变量与成员变量等信息。

javap参数

-v -verbose,输出附加信息(包括行号、本地变量表,反汇编等详细信息)
-c,对代码进行反汇编
-p 输出私有的相关信息

jclasslib,字节码查看工具,有idea插件

Mac下用Hex Fiend打开,看字节码的组成

你可能感兴趣的:(12. 字节码整体结构)