Java:循环和性能中变量的范围

时间:2016-12-22 04:40:30

标签: java performance jvm

我使用的是Oracle JDK8。我们假设我们有以下两个类:

class MyLoop {

    private final long times;

    MyLoop(final long times) {
        this.times = times;
    }

    int widerScope() {
        final String var = MyClass.VARIABLE;

        int j = 0;
        for (long l = 0; l < times; l++) {
            j += var.length();
        }

        return j;
    }

    int narrowerScope() {
        int j = 0;
        for (long l = 0; l < times; l++) {
            final String var = MyClass.VARIABLE;

            j += var.length();
        }

        return j;
    }

}

class MyClass {
    static final String VARIABLE = "foo";
}

我想知道哪一个效率更高,widerScope()narrowerScope()。我更喜欢narrowerScope(),因为变量var的范围较窄,但widerScope()仅将变量var初始化一次,因此我认为它可能更有效。

我还创建了一个用于基准测试的测试用例,但我无法看到执行时间的任何显着差异。

public class MyLoopTest {

    private final MyLoop sut = new MyLoop(6000000000L);

    @Test
    public void narrower() throws Exception {
        sut.narrowerScope();
    }

    @Test
    public void wider() throws Exception {
        sut.widerScope();
    }
}
你怎么看?或者,是否有任何参考,规范或信息可以明确这个问题?

0 个答案:

没有答案