Performance of instanceof with interfaces is multiple times slower than with classes
john.r.rose at oracle.com
Fri Aug 7 22:45:38 UTC 2020
On Aug 7, 2020, at 12:41 PM, Christoph Dreis <christoph.dreis at freenet.de> wrote:
> thanks for your elaborate answer. That helps a lot indeed and explains some dead ends I - as a non Hotspot engineer - could have not solved without some hints.
> I will dig a bit deeper into this now and also follow up on the "big discussion" in the past.
> Thank you for taking the time - I really appreciate it.
You are welcome!
One thing mentioned in checktype.txt is a lookaside negative cache,
of one element. That might make your micro go faster (maybe; it’s
already plenty fast given the short SS array), but wouldn’t scale so well
to Scala’s use cases. I suspect there’s useful future work to be done.
But, to emphasize: The really interesting improvements, IMO, involve
both negative and positive tests on *long* secondary super arrays,
and *less frequent updates* of cross-thread state.
Your benchmark doesn’t touch on either of those questions.
One thing it *might* touch on is a relative slowness for traversing
a zero-element SS array. I think the repne_scan idiom (scasq) might
be past its sell-by date; is may no longer be faster than just a regular
tight loop of load/cmp/jcc. So, a quick experiment you might wish
to try is to patch out the use of scasq with a bit of replacement code
and see if it helps. Further down that rabbit hole would be an attempt
to recognize longer SS arrays and call an out-of-line routine, which
then could be upgraded to binary search.
More information about the hotspot-runtime-dev