RFR: 8291360: Create entry points to expose low-level class file information [v2]
David Holmes
dholmes at openjdk.org
Tue Aug 2 06:51:12 UTC 2022
On Mon, 1 Aug 2022 13:30:21 GMT, Harold Seigel <hseigel at openjdk.org> wrote:
>> src/hotspot/share/prims/jvm.cpp line 4064:
>>
>>> 4062: assert(c->is_instance_klass(), "must be");
>>> 4063: InstanceKlass* ik = InstanceKlass::cast(c);
>>> 4064: return (ik->minor_version() << 16) | ik->major_version();
>>
>> I'm curious why the format is minor:major rather than major:minor ?
>
> This was requested by @RogerRiggs
>
> Major high vs low bits requires either:
> High bits: val >>>16
> Low bits: val & 0xffff
>
> Except for preview, the minor version is 0, so putting major version in the low bits allows trivial comparison (without masking); but may lead to bugs due to carelessness.
Okay makes sense.
>> test/hotspot/jtreg/runtime/ClassFile/ClassFileVersionTest.java line 31:
>>
>>> 29: * @modules java.base/java.lang:open
>>> 30: * @compile classFileVersions.jcod
>>> 31: * @run main/othervm --enable-preview ClassFileVersionTest
>>
>> What preview feature is being used here?
>
> No preview feature is being used but --enable-preview is needed here for the JVM to accept a class with a minor version of 65535.
Ah I see.
-------------
PR: https://git.openjdk.org/jdk/pull/9688
More information about the build-dev
mailing list