RFR: 8366584: Add an InstanceKlass::super() method that returns InstanceKlass*

David Holmes dholmes at openjdk.org
Tue Sep 2 05:39:49 UTC 2025


On Tue, 2 Sep 2025 01:31:59 GMT, Ioi Lam <iklam at openjdk.org> wrote:

> By adding an `InstanceKlass* InstanceKlass::super()` method to shadow `Klass* Klass:super()`, this PR makes it possible to simplify the following code
> 
> 
> InstanceKlass* ik;
> InstanceKlass* s;
> s = InstanceKlass::cast(ik->super()); // before JDK-8366024 
> s = ik->java_super(); // after JDK-8366024 
> 
> 
> to
> 
> 
> s = k->super();
> 
> 
> So you no longer need to do casting or need to understand what `java_super()` is.

Looks good! Great to see all those `java_super()` calls disappear. A couple of nits/comments.

Thanks

src/hotspot/share/memory/heapInspection.cpp line 405:

> 403:                                                       bool print_subclasses) {
> 404:   // Set do_print for all superclasses of this class.
> 405:   InstanceKlass* super = InstanceKlass::cast(cie->klass())->super();

Pre-existing, but if this cast is safe then `KlassInfoEntry::_klass` should be declared `InstanceKlass`. Otherwise this cast is not safe! Separate RFE for that.

src/hotspot/share/oops/instanceKlass.hpp line 921:

> 919:   }
> 920: 
> 921:   // This shadows Klass::super(). The _super of an InstanceKlass is

Suggestion:

  // This overrides Klass::super(). The _super of an InstanceKlass is

src/hotspot/share/oops/instanceKlass.hpp line 924:

> 922:   // always an InstanceKlass (or nullptr)
> 923:   InstanceKlass* super() const {
> 924:     return (Klass::super() == nullptr) ? nullptr : InstanceKlass::cast(Klass::super());

Is it better/simpler/cleaner to just do:

return static_cast<InstanceKlass*>(Klass::super());

?

src/hotspot/share/oops/klassVtable.cpp line 1574:

> 1572:   Klass* super = _klass->super();
> 1573:   if (super != nullptr) {
> 1574:     InstanceKlass* sk = InstanceKlass::cast(super); // why are we sure this is InstanceKlass??

I don't think it is guaranteed to be an IK. But AFAICS we don't actually need an IK here anyway, we should be able to use `super` directly.

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

PR Review: https://git.openjdk.org/jdk/pull/27037#pullrequestreview-3174870461
PR Review Comment: https://git.openjdk.org/jdk/pull/27037#discussion_r2314910364
PR Review Comment: https://git.openjdk.org/jdk/pull/27037#discussion_r2314913536
PR Review Comment: https://git.openjdk.org/jdk/pull/27037#discussion_r2314912896
PR Review Comment: https://git.openjdk.org/jdk/pull/27037#discussion_r2314951109


More information about the hotspot-dev mailing list