<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><style>body { line-height: 1.5; }body { font-size: 10.5pt; font-family: ????; color: rgb(0, 0, 0); line-height: 1.5; }body { font-size: 10.5pt; color: rgb(0, 0, 0); line-height: 1.5; }</style></head><body>
<div><span></span><div>hi, everyone! </div><div><br></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">    I have some question about the jdk 1.7 compiler.</span></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);"><br></span></div><div>    According to the source code of "<span style="background-color: rgba(0, 0, 0, 0); font-size: 10.5pt; line-height: 1.5;">hotspot\src\share\vm\interpreter\invocationCounter.cpp</span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;">", the "</span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;">InterpreterBackwardBranchLimit</span><span style="background-color: window; font-size: 10.5pt; line-height: 1.5;">" is calculated by the following rules:</span></div></div><div><span style="background-color: window; font-size: 10.5pt; line-height: 1.5;"><br></span></div><div>  if (ProfileInterpreter) {<br>    InterpreterBackwardBranchLimit = (CompileThreshold * (OnStackReplacePercentage - InterpreterProfilePercentage)) / 100;<br>  } else {<br>    InterpreterBackwardBranchLimit = ((CompileThreshold * OnStackReplacePercentage) / 100) << number_of_noncount_bits;<br>  }</div><div><br></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">    So if I run a piece of code on a server edition jvm, the </span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;">InterpreterBackwardBranchLimit should be 10700 (</span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;">CompileThreshold is 10000, </span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;">OnStackReplacePercentage is 140, and </span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;">InterpreterProfilePercentage is 33</span><span style="background-color: window; font-size: 10.5pt; line-height: 1.5;">). But when I added -XX:+PrintCompilation,  a loop with 10700 times would not print anything. When the loop growed up to 14564 times, the compiler began to work.</span></div><div><span style="background-color: window; font-size: 10.5pt; line-height: 1.5;"><br></span></div><div>    Could anybody give me some advice?</div><div><br></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">    I use jdk1.7.0_67, and the test code as following:</span></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);"><br></span></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">public class OSRDemo {<br><span style="white-space: pre;">   </span>public static void main(String[] args) {<br><span style="white-space: pre;">        </span><span style="white-space: pre;">   </span>int result = 1;<br><span style="white-space: pre;">   </span><span style="white-space: pre;">   </span>for (int i = 1; i < 10700; i++) {//14564<br><span style="white-space: pre;"> </span><span style="white-space: pre;">   </span><span style="white-space: pre;">   </span>result+=i;<br><span style="white-space: pre;">       </span><span style="white-space: pre;">   </span>}<br><span style="white-space: pre;">        </span><span style="white-space: pre;">   </span><br><span style="white-space: pre;"> </span><span style="white-space: pre;">   </span>System.out.println(result);<br><span style="white-space: pre;">      </span>}<br>}</span></div><div><br></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">    Thank you very much!</span></div>
<div><br></div><hr style="width: 210px; height: 1px;" color="#b5c4df" size="1" align="left">
<div><span><div style="MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt"><div>Thomas</div></div></span></div>
</body></html>