The mysterious constant pool tag #2
John Rose
john.r.rose at oracle.com
Fri Feb 18 22:27:21 UTC 2022
On 13 Jan 2021, at 11:28, x4e_x4e wrote:
> I am wondering if anyone here (probably someone involved in the early
> JVM design) knows the original purpose of tag number 2?
I’ve been on the project since around 1.0, and it was unused at that
point.
Googling brings up reasonable discussions like this:
https://stackoverflow.com/questions/46653615/why-is-the-java-class-file-format-missing-constant-pool-tag-2
The name (`CONSTANT_Unicode`) *suggests* that it was at some point
intended for something like a UTF-16 version of strings. There is no
further “secret history” that I’m aware of.
*Personally*, I’d like to eventually use that code point for
`CONSTANT_Bytes`, sort of like many protocol schemas distinguish Utf8
data strings from byte data strings. We don’t have a good bytewise
constant pool format, and since we now have `CONSTANT_Dynamic` we can
consider building interesting things using condy and byte-bundles, with
the latter perhaps built out on top of Panama APIs for (read-only)
memory segments.
Here is one development of this line of thought:
https://bugs.openjdk.java.net/browse/JDK-8161256
But it’s not a high priority, obviously. I think we’d want some
language level support for `CONSTANT_Dynamic` constants, and then maybe
it would be natural to back-fill byte arrays or hex-strings or Panama
segments to a new `CONSTANT_Bytes` carrier.
— John
More information about the jdk-dev
mailing list