3

Java 1.0.2 的 JVM 规范列出了以下常量池条目类型:

+-----------------------------+-------+
|        Constant Type        | Value |
+-----------------------------+-------+
| CONSTANT_Class              |     7 |
| CONSTANT_Fieldref           |     9 |
| CONSTANT_Methodref          |    10 |
| CONSTANT_InterfaceMethodref |    11 |
| CONSTANT_String             |     8 |
| CONSTANT_Integer            |     3 |
| CONSTANT_Float              |     4 |
| CONSTANT_Long               |     5 |
| CONSTANT_Double             |     6 |
| CONSTANT_NameAndType        |    12 |
| CONSTANT_Utf8               |     1 |
+-----------------------------+-------+

随后的 JVM 规范添加了更多常量池条目类型,但从未填补“2”的位置。为什么那里有空隙?

4

1 回答 1

4

我做了一些研究,发现了一些线索,对于常量池标签2,它似乎在Constant_Unicode下保持开放但从未使用过,因为UTF-8已经存在,并且UTF-8被广泛采用,所以如果有是常量用 unicode 写的,UTF-8 可以处理,而且 UTF-8 比其他编码方案有很多优势,所以我想这个历史事实可以解释为什么 2 丢失了,我猜如果它可以被重用于其他目的必要的。

来自这里的一些陈述: https ://bugs.openjdk.java.net/browse/JDK-8161256

对于13、14,应该有不同的具体原因,打开了却一直没用。

于 2020-08-08T10:08:46.800 回答