使用参数运行以下代码显示,两种方法 m3 都首先内联。我对 jvm 使用了以下参数: .显然,第一个执行计数达到内联阈值的方法首先内联。在我们的例子中,m3。因此,对于我用于测试的热点,我首先执行并执行结束。-XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining
m3
m2
代码在 windows 8 box 上禁用了分层编译,服务器模式与jdk7_u40一起运行。该命令的输出为:
@ 66 java.lang.String::indexOfSupplementary (71 bytes) too big
@ 21 methodTest::m3 (31 bytes) inline (hot)
@ 11 methodTest::m2 (35 bytes) inline (hot)
@ 21 methodTest::m3 (31 bytes) inline (hot)
@ 14 methodTest::m1 (25 bytes) inline (hot)
@ 11 methodTest::m2 (35 bytes) inline (hot)
@ 21 methodTest::m3 (31 bytes) inline (hot)
m1
是大小, 是 和 具有 。25 bytes
m2
35 bytes
m3
31 bytes
public class methodTest {
public static void main(String[] args) {
doTest();
}
int i = 0;
int j = 0;
int k = 0;
private static void doTest() {
methodTest m = new methodTest();
for (int i = 0; i < 1000000000; i++) {
m.m1();
}
System.out.println(m.i);
System.out.println(m.j);
System.out.println(m.k);
}
private void m1() {
i++;
m2();
j++;
}
private void m2() {
i++;
i++;
m3();
j++;
}
private void m3() {
i++;
j++;
k++;
}
}