[9] RFR (S): 7177745: JSR292: Many Callsite relinkages cause target method to always run in interpreter mode
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Mon Jan 18 12:54:48 UTC 2016
http://cr.openjdk.java.net/~vlivanov/7177745/webrev.00/
https://bugs.openjdk.java.net/browse/JDK-7177745
JVM aggressively inlines through CallSites, even for mutable and
volatile flavors. It's the key optimization for making invokedynamic
performant.
When a CallSite.target is updated, JVM invalidates all affected nmethods
and try to recompile them later. If a call site target regularly
changes, JVM will eventually mark (after PerMethodRecompilationCutoff
invalidations) all hot methods which have the call site bound as
non-compilable. It leads to significant peak performance reduction,
because all affected methods will always be executed in interpreter mode
since then.
The fix is to avoid updating recompilation count when corresponding
nmethod is invalidated due to a call site target change.
I filed a separate RFE (JDK-8147550 [1]) to consider slow non-inlined
code shape for unstable call sites, as John suggested [2].
Testing: regression test, octane, JPRT.
Thanks!
Best regards,
Vladimir Ivanov
[1] https://bugs.openjdk.java.net/browse/JDK-8147550
[2]
https://bugs.openjdk.java.net/browse/JDK-7177745?focusedCommentId=13821545&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13821545
More information about the hotspot-compiler-dev
mailing list