美文网首页
12. 字节码整体结构

12. 字节码整体结构

作者: ZFH__ZJ | 来源:发表于2020-02-20 12:56 被阅读0次

    字节码整体结构

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

    Java字节码整体结构图

    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. 字节码整体结构

          本文链接:https://www.haomeiwen.com/subject/nqcxqhtx.html