-
Enhancement
-
Resolution: Fixed
-
P4
-
18
-
b21
This presents two problems:
1. Method can be rarely used in a particular caller, yet if its total execution count is high it may be still inlined.
2. The use of absolute counts is inherently problematic with the current compilation policy (adaptive threshold and background compilation). It leads to instabilities of inlining decisions.
The proposed solution is to consider call site execution ratio in order to reject callees that are rarely executed. Set the old cutoff parameter (MinInliningThreshold) to 0 to essentially disable it and later deprecate it.
Setting the introduced MinInlineFrequencyRatio = 0.0085 produces the following notable improvements:
Renaissance-Dotty 1.23%
Renaissance-Mnemonics 3.88%
Renaissance-NaiveBayes 9.23%
Renaissance-ScalaKmeans 1.36%
SPECjvm2008-Derby 3.16%
There are of course some regressions but those are few and on the order of 1.5%
- csr for
-
JDK-8275676 Deprecate MinInliningThreshold
-
- Closed
-
- duplicates
-
JDK-8273713 C2: Deprecate MinInliningThreshold
-
- Closed
-
- relates to
-
JDK-8329267 -10% Dacapo:jython regression after JDK-8273712
-
- Open
-
-
JDK-8333098 ubsan: bytecodeInfo.cpp:318:59: runtime error: division by zero
-
- Resolved
-
-
JDK-8325681 C2 inliner rejects to inline a deeper callee because the methoddata of caller is immature.
-
- Open
-
-
JDK-8277748 Obsolete the MinInliningThreshold flag in JDK 19
-
- Resolved
-
-
JDK-8279911 Expire the MinInliningThreshold flag in JDK 20
-
- Closed
-