> 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.