RFR: 8138659: Speed up InstanceKlass subclass discrimination

Kim Barrett kim.barrett at oracle.com
Sat Oct 3 18:26:06 UTC 2015


Please review this change to speed up discrimination among the classes
rooted at InstanceKlass.

We use 2 bits from InstanceKlass::_misc_flags (the _misc_kind field)
for discrimination among the four kinds of InstanceKlass.  We use the
low 2 bits of _misc_flags to avoid a shift when accessing the field.
This means that all the existing flags are being shifted up 2 bits.
Added an accessor and a suite of predicates to InstanceKlass.  Added
kind argument to InstanceKlass constructor, which is used to set the
_misc_kind field. Updated all callers to provide the appropriate
value.

With these changes we can use the layout_helper-based
Klass::oop_is_instance to get to the InstanceKlass case, and use the
_misc_kind value to further discriminate from there.  In particular,
the concrete InstanceKlass case is (after inlining)

  (klass->_layout_helper > 0) &&
  ((static_cast<InstanceKlass*>(klass)->_misc_flags & 3) == 0)

We could do better with a single discriminator, but there doesn't
appear to be a good place to add such in Klass, and we don't want to
make Klass bigger.

Changed calls to Klass::oop_is_instanceXXX to instead call
Klass::oop_is_instance then cast to InstanceKlass and use the
corresponding kind_is_xxx predicate.  Removed the no longer used
Klass::oop_is_instanceXXX functions.

Removed unused InstanceRefKlass::cast.  InstanceMirrorKlass::cast is
retained because it is used.  InstanceClassLoaderKlass::cast does not
exist.

CR:
https://bugs.openjdk.java.net/browse/JDK-8138659

Webrev:
http://cr.openjdk.java.net/~kbarrett/8138659/webrev.00/

Testing:
JPRT
Aurora ad-hoc defaults + GC Nightly + Runtime Nightly



More information about the hotspot-dev mailing list