眾所周知,jvm是有標量替換和公共子運算式消除的編譯優化的。
那理論上我這個AClass的getNum方法應該只會執行一次才對,可為什么我打斷點進行debug時這個方法跑了兩次?
public class CompileTest {
public class AClass{
public int getNum(int i) {
return 1024 * 32 * i;
}
}
public void test() {
AClass aClass = new AClass();
int num1 = aClass.getNum(25);
int num2 = aClass.getNum(25);
}
public static void main(String[] args) {
CompileTest compileTest = new CompileTest();
compileTest.test();
}
}標量替換,會把AClass的getNum方法塊直接行內至test方法,而公共子運算式消除則應該消除代碼塊 1024*32*i,那這個代碼塊應該執行一次啊,大牛們能不能指點下迷津?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39646.html
標籤:Java相關
上一篇:6、JAVA算術運算的一些注意點
下一篇:Mybatis #{}預處理錯誤
