Virtual dispatch bug in 292 impl

Christian Thalinger christian.thalinger at oracle.com
Mon Jan 7 16:59:38 PST 2013


On Jan 7, 2013, at 4:42 PM, Charles Oliver Nutter <headius at headius.com> wrote:

> A quick test of the fix Christian gave me seems to indicate that
> things are working. Yay!

Thanks for verifying.

> 
> Will try running our comprehensive "all" suite this evening.

Please also look out for performance regressions.  I've found at least one with Nashorn.

-- Chris

> 
> - Charlie
> 
> On Thu, Jan 3, 2013 at 2:24 PM, Charles Oliver Nutter
> <headius at headius.com> wrote:
>> Sorry I lost track of this thread going into the holidays...I talked
>> to Christian a moment ago but I reply here for the record...
>> 
>> Christian Thalinger <christian.thalinger at oracle.com> wrote:
>>>> I filed:
>>>> 
>>>> https://jbs.oracle.com/bugs/browse/JDK-8005418
>>>> 
>>>> But it seems to be C2, not C1:
>> 
>> Does look that way in your output. I'll leave it in your hands. I will
>> say I am almost positive that when I ran with tier=1 it failed, and
>> -tiered worked ok, but I don't have the output in front of me.
>> 
>>> What's the name of the [] implementation of ENV?  Is it StringOnlyRubyHash.op_aref?
>> 
>> Yes, that's the one. The handle points at the superclass impl,
>> RubyHash.op_aref, and that's the one that gets hit instead of the
>> override.
>> 
>>> Could this be the compile that goes wrong?
>>> 
>>>  12903  956             java.lang.invoke.LambdaForm$MH/847376::convert (52 bytes)
>>>                            @ 15   java.lang.invoke.LambdaForm$BMH/23638730::reinvoke (26 bytes)   inline (hot)
>>>                              @ 12   java.lang.invoke.BoundMethodHandle$Species_LL::reinvokerTarget (8 bytes)   inline (hot)
>>>                              @ 22   java.lang.invoke.LambdaForm$DMH/20340225::invokeStatic_LL_L (15 bytes)   inline (hot)
>>>                                @ 1   java.lang.invoke.DirectMethodHandle::internalMemberName (8 bytes)   inline (hot)
>>>                                @ 11   sun.invoke.util.ValueConversions::castReference (6 bytes)   inline (hot)
>>>                                  @ 2   java.lang.Class::cast (27 bytes)   inline (hot)
>>>                                    @ 6   java.lang.Class::isInstance (0 bytes)   (intrinsic)
>>>                            @ 33   java.lang.Class::cast (27 bytes)   inline (hot)
>>>                              @ 6   java.lang.Class::isInstance (0 bytes)   (intrinsic)
>>>                            @ 43   java.lang.Class::cast (27 bytes)   inline (hot)
>>>                              @ 6   java.lang.Class::isInstance (0 bytes)   (intrinsic)
>>>                            @ 48   java.lang.invoke.LambdaForm$DMH/32367447::invokeVirtual_LLL_L (18 bytes)   inline (hot)
>>>                              @ 1   java.lang.invoke.DirectMethodHandle::internalMemberName (8 bytes)   inline (hot)
>>>                              @ 14   org.jruby.RubyHash::op_aref (23 bytes)   inline (hot)
>> 
>> This looks like what I saw while debugging, yes. Not sure if this
>> exact output is right because there's not much context, but I did see
>> the call that *should* have been going to StringOnlyRubyHash.op_aref
>> going to RubyHash.op_aref.
>> 
>> There aren't many such cases in JRuby...most overrides are accompanied
>> by an override in the Ruby class structures, so the child class has
>> its own handle pointing at the override. That's probably why we don't
>> see it in more places.
>> 
>> I have not retested with any of the recent work on partial inlining,
>> etc. Since it looks like you're able to reproduce it ok, I'll leave it
>> in your hands. Let me know what else I can do.
>> 
>> - Charlie



More information about the hotspot-compiler-dev mailing list