> De: "Brian Harris" <brianfromore...@gmail.com>
> À: "mechanical-sympathy" <mechanical-sympathy@googlegroups.com>
> 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 < [ 
> mailto:vita...@gmail.com
> | vita...@gmail.com ] > wrote:

>> On Sun, Dec 29, 2019 at 10:22 AM Brian Harris < [
>> mailto:brianfromore...@gmail.com | brianfromore...@gmail.com ] > 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/
>>> |
>>> http://www.insightfullogic.com/2014/May/12/fast-and-megamorphic-what-influences-method-invoca/
>>> ]
>>> [ https://shipilev.net/blog/2015/black-magic-method-dispatch/ |
>>> https://shipilev.net/blog/2015/black-magic-method-dispatch/ ]
>>> [ https://gist.github.com/djspiewak/464c11307cabc80171c90397d4ec34ef |
>>> 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 |
>> 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. 

>>> 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 mechanical-sympathy+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/mechanical-sympathy/197490853.62864.1577729341131.JavaMail.zimbra%40u-pem.fr.

Reply via email to