为什么 Java class 文件格式缺少常量池标记 2?
Why is the Java class file format missing constant pool tag 2?
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”位置。为什么那里有空隙?
我做了一些研究,发现了一些线索,对于常量池标记 2,它似乎在 Constant_Unicode 下保持打开状态,但从未使用过,因为 UTF-8 已经存在,而 UTF -8 被广泛采用,所以如果有用 unicode 编写的常量,UTF-8 可以处理它,UTF-8 比其他编码方案有很多优势,所以我想这个历史事实可以解释为什么缺少 2,我猜猜它可以在必要时用于其他目的。
这里的一些陈述:
https://bugs.openjdk.java.net/browse/JDK-8161256
对于13、14,应该有不同的具体原因,为什么它被打开但没有被使用。
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”位置。为什么那里有空隙?
我做了一些研究,发现了一些线索,对于常量池标记 2,它似乎在 Constant_Unicode 下保持打开状态,但从未使用过,因为 UTF-8 已经存在,而 UTF -8 被广泛采用,所以如果有用 unicode 编写的常量,UTF-8 可以处理它,UTF-8 比其他编码方案有很多优势,所以我想这个历史事实可以解释为什么缺少 2,我猜猜它可以在必要时用于其他目的。
这里的一些陈述: https://bugs.openjdk.java.net/browse/JDK-8161256
对于13、14,应该有不同的具体原因,为什么它被打开但没有被使用。