常量池
java虚拟机指令依赖在常量池表中的符号信息,而不是类,接口,类实例或者数组的运行时布局。
所有的常量池项都遵循以下格式:
1 2 3 4
| cp_info { u1 tag; u1 info[]; }
|
- 在常量池表中的每个元素都有这个cp_info形式的结构,tag是一个元素的开始字段,占1位,用来表示cp_info这个结构是哪种结构(CONTSANT_Class_info等结构)。
- info数组是tag表示的结构组成的数组。
以下就是tag与cp_info结构对应关系。value项就是常量类型在tag中的标志。当tag=7时,info里面就存储一个CONTSANT_Class类型的数组。
CONSTANT_Class_info结构体
CONSTANT_Fieldref_info, CONSTANT_Methodref_info和CONSTANT_InterfaceMethodref_info结构体
CONSTANT_String_info 结构体
CONSTANT_Integer_info和CONSTANT_Float_info结构体
CONSTANT_Long_info和CONSTANT_Double_info结构体
CONSTANT_NameAndType_info结构体
CONSTANT_Utf8_info结构体
CONSTANT_MethodHandle_info结构体
CONSTANT_MethodType_info结构体
CONSTANT_InvokeDynamic_info结构体