常量池

常量池可以理解为Class文件的资源仓库;常量池是class文件中非常重要的结构,它描述着整个class文件的字面量信息。 常量池是由一组constant_pool结构体数组组成的,而数组的大小则由常量池计数器指定。常量池计数器constant_pool_count 的值 =constant_pool表中的成员数+ 1。constant_pool表的索引值只有在大于 0 且小于constant_pool_count时才会被认为是有效的。

特性

  • Class文件结构中与其他项目关联最多的数据类型
  • Class文件空间最大的数据项目之一
  • Class文件中第一个出现的表类型数据项目
  • 常量池入口u2类型数据表示常量池容量计数值(constant_pool_count),从1开始
  • 常量池的第0项常量空出来用于表示"不引用任何一个常量池项目"
  • 常量池中的每一项常量都是一个表

常量池计数器(constant_pool_count)

常量池是class文件中非常重要的结构,它描述着整个class文件的字面量信息。 常量池是由一组constant_pool结构体数组组成的,而数组的大小则由常量池计数器指定。常量池计数器constant_pool_count 的值 =constant_pool表中的成员数+ 1。constant_pool表的索引值只有在大于 0 且小于constant_pool_count时才会被认为是有效的

常量池数据区(constant_pool[contstant_pool_count-1])

常量池,constant_pool是一种表结构,它包含 Class 文件结构及其子结构中引用的所有字符串常量、 类或接口名、字段名和其它常量。 常量池中的每一项都具备相同的格式特征——第一个字节作为类型标记用于识别该项是哪种类型的常量,称为 “tag byte” 。常量池的索引范围是 1 至constant_pool_count−1

常量池存储对象

字面量(Literal)
符号引用(Symbolic References)

  • 类和接口的全限定名(Fully Qualified Name)
  • 字段的名称和描述符(Descriptor)
  • 方法的名称和描述符

图示:

CONSTANT_Long_info & CONSTANT_Double_info

JAVA标识符与CONSTANT_Utf8_info

results matching ""

    No results matching ""