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;
    }
  • 相关阅读:
    http statusCode(状态码) 200、300、400、500序列
    一行css代码调试中学到的javascript知识,很有意思
    jquery中的cookie
    图片预加载和AJAX的图片预加载
    关于图片懒加载
    iframe的自适应
    阻止微信端浏览器下滑出现空白条现象
    动态加载js文件
    kaldi 的安装和测试
    Python算法-排序
  • 原文地址:https://www.cnblogs.com/kitor/p/13583317.html
Copyright © 2011-2022 走看看