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.
