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”点。那里为什么会有差距?
答案 0 :(得分:2)
我做了一些研究,发现了一些线索,对于常量池标记2,它似乎在Constant_Unicode下保持打开状态,但从未使用过,因为UTF-8已经存在,并且UTF-8被广泛采用,因此,如果存在用unicode编写的常量,则UTF-8可以处理它,并且UTF-8比其他编码方案有很多优势,因此我想这个历史事实可以解释为什么缺少2,我想可以将其重复用于其他目的。
这里有一些陈述: https://bugs.openjdk.java.net/browse/JDK-8161256
对于13、14,它应该有不同的特定原因才能打开但从未使用过。