JVM常量池条目

时间:2015-02-27 15:16:27

标签: java jvm jvm-bytecode

查看某些课程上运行javap的输出,我发现了以下奇怪之处:<​​/ p>

某些类的常量池包含

等条目
#33 = Utf8               Code
#34 = Utf8               LocalVariableTable
#35 = Utf8               StackMapTable
#36 = Utf8               MethodParameters

为什么这些常量出现在常量池中?

1 个答案:

答案 0 :(得分:2)

以下常量

#33 = Utf8               Code
#34 = Utf8               LocalVariableTable
#35 = Utf8               StackMapTable
#36 = Utf8               MethodParameters

attributes的名称。

  

对于所有属性,attribute_name_index必须是类的常量池中的有效无符号16位索引。 attribute_name_index的constant_pool条目必须是表示属性名称的CONSTANT_Utf8_info结构(§4.4.7)。

您提到的属性具有以下功能:

  • Code属性包含Java虚拟机指令和方法的辅助信息,包括实例初始化方法或类或接口初始化方法。
  • 调试器可以使用LocalVariableTable属性[...]来确定方法执行期间给定局部变量的值。
  • 在通过类型检查进行验证的过程中使用StackMapTable属性
  • MethodParameters属性记录有关方法形式参数的信息,例如名称。