The mysterious constant pool tag #2

x4e_x4e x4e_x4e at protonmail.com
Thu Jan 14 08:27:00 UTC 2021


Wow, thank you Alex, that’s very interesting to see.
The same RFE also solves the mystery of tag 13, saying:

> The CONSTANT_Group tag 13 lies in a gap previously left open for the module system in the JDK 7 time frame.
Thank You for the help!

On Wed, Jan 13, 2021 at 11:14 pm, Alex Buckley <alex.buckley at oracle.com> wrote:

> A knowledgeable correspondent pointed me to an RFE from John Rose:
>
> https://bugs.openjdk.java.net/browse/JDK-8161256
>
> which contains the info we seek:
>
> "The code 2 has been held open under the name CONSTANT_Unicode
> but has never been used, probably because of the wide adoption
> of UTF8 for string data."
>
> Alex
>
> On 1/13/2021 1:08 PM, Alex Buckley wrote:
>> The earliest JVM Spec listed on docs.oracle.com is actually the Second
>> Edition from 1999, specifying Java 1.2:
>> https://docs.oracle.com/javase/specs/jvms/se6/html/VMSpecTOC.doc.html.
>> It's listed under Java SE 6 due to a complicated update history, not
>> relevant here.
>>
>> In any case, you're right that constant pool tag 2 was not defined in
>> even the First Edition from 1996. I have information about many
>> historical artifacts in the JVM Spec, but not this. Since tag 1 is
>> CONSTANT_Utf8, and since the ClassFile's UTF-8 isn't exactly UTF-8, and
>> since tags for numeric constants start rather clearly at 3, I'd guess
>> that tag 2 was once another string encoding, perhaps CONSTANT_Utf16.
>>
>> Alex
>>
>> On 1/13/2021 11:28 AM, x4e_x4e wrote:
>>> Hello,
>>>
>>> I am attempting to find the purpose of the seemingly abandoned
>>> constant pool tag number 2.
>>> My guess is that the item type denoted by this tag was removed and the
>>> tag was never reclaimed.
>>>
>>> I've attempted to locate the earliest possible JVM spec including this
>>> constant tag - to no avail.
>>> The earliest spec listed on https://docs.oracle.com/javase/specs/ is
>>> the SE 6 spec, which does not include the tag.
>>> I did however find the original JSR catalog
>>> (https://jcp.org/en/jsr/all), however it is unclear which JSR contains
>>> the first JVM specification (Many links 404 and earlier specifications
>>> only cover the language side of things).
>>> As far as I can tell, this is the first final release JVM
>>> specification:
>>> http://web.archive.org/web/20000816180614/http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html
>>> however, once again, it seems that there is no constant tag number 2.
>>>
>>> I am wondering if anyone here (probably someone involved in the early
>>> JVM design) knows the original purpose of tag number 2?
>>>
>>> Thank You.
>>>
>>> PS: I found that you can actually buy the original JVM specification
>>> on amazon
>>> (https://www.amazon.co.uk/Java-Virtual-Machine-Specification/dp/020163452X)
>>> - even new!
>>>
>>> JSth
>>>


More information about the jdk-dev mailing list