RFR: 8283574: Use Klass::_id for type checks in the C++ code

Stefan Karlsson stefank at openjdk.java.net
Thu Mar 24 06:00:45 UTC 2022


On Wed, 23 Mar 2022 19:30:35 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

>> We have at least three ways to check the type of a given Klass*:
>> 1) Using the Klass::_id field
>> 2) Using the layout helper
>> 3) Using the InstanceKlass::_kind field
>> 
>> The Klass::_id field was something that was added when we rewrote the oop_oop_iterate dispatch mechanism, but the other mechanisms where left in place.
>> 
>> The current Loom code uses both (2) and (3) every time a the code checks if an object is of type InstanceStackChunkKlass. In the Loom repository I intend to reduce that check to be a single test against the (1) field. To keep the code unified, and simpler, I changed all C++ Klass type checks to use (1).
>> 
>> I propose that we upstream this change to the mainline, to slightly reduce the Loom diff.
>
> src/hotspot/share/oops/instanceKlass.hpp line 139:
> 
>> 137: 
>> 138:  protected:
>> 139:   InstanceKlass(const ClassFileParser& parser, KlassID id = ID);
> 
> I think I would prefer that KlassID was required.  I don't know how much fanout that might have though.  That preference is despite making construction of a concrete InstanceKlass different from the others.  That's an artifact of InstanceKlass being overloaded as both a base class and a leaf class, a pattern that seems to often lead to trouble.

I'll take a look at this when converting KlassID to KlassKind.

-------------

PR: https://git.openjdk.java.net/jdk/pull/7922


More information about the hotspot-dev mailing list