JVM实探之cp_info.tag格式说明

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;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值