Java for循环结束条件编译器优化

时间:2019-08-27 05:46:23

标签: java performance

考虑以下代码:

public void doSomething(Foo foo) {
    for (int i = 0; i < factorial(foo.getSize()); i++) {
      //...
    }
}

public void doSomethingAnotherWay(Foo foo) {
    int max = factorial(foo.getSize());
    for (int i = 0; i < max; i++) {
        //...
    }
}

public static int factorial(int n) {
    //...
}
乍一看,在函数doSomething中,阶乘函数(或任何其他替代函数)被评估了几次,而在doSomethingAnotherWay函数中仅被评估了一次。假设阶乘函数的计算成本很高。

将结果存储在循环之前的变量中是否值得,还是编译器会对其进行优化的东西?

要进行此优化,阶乘函数是否必须是静态的(因为其输出始终由其输入确定)?如果foo.getSize()可以更改(例如,通过设置器)怎么办?像这样的优化通常如何工作?

0 个答案:

没有答案
相关问题