zoukankan      html  css  js  c++  java
  • JVM——Class文件

    class文件的整体格式

    类型 名称 数量
    u4 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 attribute_count 1
    attribute_info attributes attributes_count

    常量池的项目类型

    类 型 标 志 描 述
    CONSTANT_Utf8_info 1 UTF-8编码的字符串
    CONSTANT_Integer_info 3 整型字面量
    CONSTANT_Float_info 4 浮点型字面量
    CONSTANT_Long_info 5 长整形字面量
    CONSTANT_Double_info 6 双精度浮点型字面量
    CONSTANT_Class_info 7 类或接口的符号引用
    CONSTANT_String_info 8 字符串类型字面量
    CONSTANT_Fieldref_info 9 字段的符号引用
    CONSTANT_Methodref_info 10 方法的符号引用
    CONSTANT_InterfaceMethodref_info 11 接口的方法符号引用
    CONSTANT_NameAndType_info 12 字段或方法的部分符号引用
    CONSTANT_MethodHandle_info 15 表示方法句柄
    CONSTANT_MethodType_info 16 标识方法类型
    CONSTANT_InvokeDynamic_info 18 表示一个动态方法调用点

    常量池的各项目类型结构

    CONSTANT_Class_info 结构用于表示类或接口,格式如下:

    CONSTANT_Class_info {
        u1 tag;
        u2 name_index;
    }

    CONSTANT_Fieldref_info, CONSTANT_Methodref_info 和CONSTANT_InterfaceMethodref_info

    字段,方法和接口方法由类似的结构表示:

    字段:

    CONSTANT_Fieldref_info {
        u1 tag;
        u2 class_index;
        u2 name_and_type_index;
    }

    方法:

    CONSTANT_Methodref_info {
        u1 tag;
        u2 class_index;
        u2 name_and_type_index;
    }

    接口方法:

    CONSTANT_InterfaceMethodref_info {
        u1 tag;
        u2 class_index;
        u2 name_and_type_index;
    }

    CONSTANT_String_info 用于表示java.lang.String 类型的常量对象,格式如下:

    CONSTANT_String_info {
        u1 tag;
        u2 string_index;
    }

    CONSTANT_Intrger_info 和CONSTANT_Float_info 结构表示4 字节(int 和float)的数值常量:

    CONSTANT_Integer_info {
        u1 tag;
        u4 bytes;
    }
     
    CONSTANT_Float_info {
        u1 tag;
        u4 bytes;
    }

    CONSTANT_Long_info 和CONSTANT_Double_info 结构表示8 字节(long 和double)的数值常量:

    CONSTANT_Long_info {
        u1 tag;
        u4 high_bytes;
        u4 low_bytes;
    }
     
    CONSTANT_Double_info {
        u1 tag;
        u4 high_bytes;
        u4 low_bytes;
    }

    CONSTANT_NameAndType_info 结构用于表示字段或方法,但是和字段、方法、接口方法结构不同,CONSTANT_NameAndType_info 结构没有标识出它所属的类或接口,格式如下:

    CONSTANT_NameAndType_info {
        u1 tag;
        u2 name_index;
        u2 descriptor_index;
    }

    CONSTANT_Utf8_info 结构用于表示字符串常量的值: 

    CONSTANT_Utf8_info {
        u1 tag;
        u2 length;
        u1 bytes[length];
    }

    CONSTANT_MethodHandle_info 结构用于表示方法句柄,结构如下:

    {
        u1 tag;
        u1 reference_kind;
        u2 reference_index;
    }

    其中,tag 项的值为CONSTANT_MethodHandle(15)。reference_kind 项的值必须在1 至9 之间(包括1 和9),它决定了方法句柄的类型。reference_index 项的值必须是对常量池的有效索引。

    CONSTANT_MethodType_info 结构用于表示方法类型:

    CONSTANT_MethodType_info {
        u1 tag;
        u2 descriptor_index;
    }

    CONSTANT_InvokeDynamic_info 用于表示invokedynamic 指令所使用到的引导方法(Bootstrap Method)、引导方法使用到动态调用名称(Dynamic Invocation Name)、参数和请求返回类型、以及可以选择性的附加被称为静态参数(Static Arguments)的常量序列。

    CONSTANT_InvokeDynamic_info {
        u1 tag;
        u2 bootstrap_method_attr_index;
        u2 name_and_type_index;
    }
  • 相关阅读:
    mac上python3安装HTMLTestRunner
    双目深度估计传统算法流程及OpenCV的编译注意事项
    深度学习梯度反向传播出现Nan值的原因归类
    1394. Find Lucky Integer in an Array
    1399. Count Largest Group
    1200. Minimum Absolute Difference
    999. Available Captures for Rook
    509. Fibonacci Number
    1160. Find Words That Can Be Formed by Characters
    1122. Relative Sort Array
  • 原文地址:https://www.cnblogs.com/kitor/p/13583317.html
Copyright © 2011-2022 走看看