常量池在类文件中丢失#3

时间:2016-12-16 02:50:14

标签: bytecode javap

我使用“javap -verbose”来解析一个类文件并找到丢失的常量池#3,有人可以告诉我原因吗?

enter image description here

2 个答案:

答案 0 :(得分:2)

请注意,前面的条目的类型为Longits documentation表示:

  

所有8字节常量占用constant_pool文件的class表中的两个条目。如果CONSTANT_Long_infoCONSTANT_Double_info结构是索引 n constant_pool表中的项目,则池中的下一个可用项目位于索引名词 2。 <{1}}索引 n +1必须有效,但视为无法使用。

和整齐的添加

  

回想起来,制作8字节常量需要两个常量池条目是不好的选择。

所以constant_pool决定简单地跳过不可用的条目,而不是打印“javap”之类的内容......

答案 1 :(得分:0)

Longs和Doubles在常量池中占用两个插槽,因此跳过它们之后的插槽。在这种情况下,插槽2保持长,因此插槽3被跳过。