【问题标题】:the constant pool lost #3 in class file常量池在类文件中丢失了#3
【发布时间】:2023-04-01 04:35:01
【问题描述】:

我使用“javap -verbose”解析一个类文件,发现常量池丢失#3,谁能告诉我原因?

 

  

【问题讨论】:

    标签: bytecode javap


    【解决方案1】:

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

    所有 8 字节常量在 class 文件的 constant_pool 表中占据两个条目。如果CONSTANT_Long_infoCONSTANT_Double_info 结构是constant_pool 表中索引n 处的项目,则池中的下一个可用项目位于索引n +2。 constant_pool 索引 n+1 必须有效但被视为不可用。

    和整洁的补充

    回想起来,让 8 字节常量占用两个常量池条目是一个糟糕的选择。

    所以javap 决定直接跳过不可用的条目,而不是打印诸如“#3 unusable”之类的内容……

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-06-06
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多