为什么Java类文件格式缺少常量池标记2?

时间:2017-10-09 19:23:39

标签: java jvm language-specifications

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”点。那里为什么会有差距?

1 个答案:

答案 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,它应该有不同的特定原因才能打开但从未使用过。

相关问题