Raf*_*ler 7 java compiler-construction optimization compiler-optimization method-call
java编译器(JDK1.6.0_21中的默认javac)是否会优化代码以防止使用相同的参数一遍又一遍地调用相同的方法?如果我写了这段代码:
public class FooBar {
public static void main(String[] args) {
foo(bar);
foo(bar);
foo(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
该方法foo(bar)只运行一次吗?如果是这样,有什么方法可以阻止这种优化吗?(我试图比较运行时的两个算法,一个迭代和一个比较,我想多次调用它们来获得一个代表性的样本)
任何见解都会非常感激; 我把这个问题带到了精神错乱的地步(虽然我的计算机在一段时间内非常快,所以我一直在添加方法调用,直到我得到code too large43671行的错误).
您正在观察的优化可能与重复调用无关......因为这将是无效的优化.更有可能的是,优化器已经发现方法调用对计算没有可观察到的影响.
治愈方法是改变方法,以免影响计算结果......