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