On Mon, Dec 30, 2019 at 1:09 PM Remi Forax <[email protected]> wrote:

>
>
> ------------------------------
>
> *De: *"Brian Harris" <[email protected]>
> *À: *"mechanical-sympathy" <[email protected]>
> *Envoyé: *Lundi 30 Décembre 2019 17:13:38
> *Objet: *Re: does call site polymorphism factor in method overrides?
>
> Good to know Vitaly!
> So a poor example then. Better example is an abstract class with a method
> implementation that no subtypes override, yet multiple subtypes are found
> to be the receiver of a particular call site. Should we expect a
> monomorphic call site in that case.
>
> On Sun, Dec 29, 2019 at 12:42 PM Vitaly Davidovich <[email protected]>
> wrote:
>
>>
>>
>> On Sun, Dec 29, 2019 at 10:22 AM Brian Harris <[email protected]>
>> wrote:
>>
>>> Hello!
>>> I was hoping to get one point of clarification about avoiding
>>> megamorphic call sites, after reading these excellent articles:
>>>
>>>
>>> http://www.insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/
>>>
>>> https://shipilev.net/blog/2015/black-magic-method-dispatch/
>>> https://gist.github.com/djspiewak/464c11307cabc80171c90397d4ec34ef
>>>
>>>
>>> When the runtime type of the call receiver is being observed, is it
>>> considered whether that type actually overrides the method in question? For
>>> example, when the method is an interface's default method that none of the
>>> runtime call receivers override, can we expect to get a monomorphic call
>>> site regardless of how many different receiver types are observed at
>>> runtime, given there is only one method body to invoke?
>>>
>> In Hotspot, CHA is currently (AFAIK) disabled for default methods (
>> https://bugs.openjdk.java.net/browse/JDK-8036580).  So you have to be
>> careful putting hot code into them.  Overriding the method in the impl and
>> just calling super will at least restore some performance if type profiling
>> at the callsite helps.
>>
>
> CHA only avoids one cheap cmp + jump that will perfectly predicted, so i'm
> not sure you will able be to see any perf difference apart from using a
> micro benchmark.
> And as far as i remember, CHA has never worked for abstract methods and
> nobody care.
>
Yeah, I don’t think CHA works for a type-megamorphic callsite that targets
the same method in the type hierarchy.  I might be wrong, but pretty sure
Hotspot doesn’t handle this case - it ends up being a virtual call if
there’s no dominant receiver type.

The big (potential) optimization loss here would be inlining; branch + call
overhead itself is unlikely to matter modulo truly trivial code called in a
tight loop.  Missed optimizations due to inlining failure is the real
problem.

>
>
>>> Thanks
>>> Brian
>>>
>>
> Rémi
>
> --
> You received this message because you are subscribed to the Google Groups
> "mechanical-sympathy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web, visit
> https://groups.google.com/d/msgid/mechanical-sympathy/197490853.62864.1577729341131.JavaMail.zimbra%40u-pem.fr
> <https://groups.google.com/d/msgid/mechanical-sympathy/197490853.62864.1577729341131.JavaMail.zimbra%40u-pem.fr?utm_medium=email&utm_source=footer>
> .
>
-- 
Sent from my phone

-- 
You received this message because you are subscribed to the Google Groups 
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/mechanical-sympathy/CAHjP37F6JT%2BRy2boGAcBEjf6nr4KM_CxF8-Wh5bH6N1eHiph7w%40mail.gmail.com.

Reply via email to