相关疑难解决方法(0)

在循环之前或循环中声明变量之间的区别?

我一直想知道,一般来说,在循环之前声明一个抛弃变量,而不是在循环内部重复,是否会产生任何(性能)​​差异?Java中的一个(毫无意义的)示例:

a)循环前的声明:

double intermediateResult;
for(int i=0; i < 1000; i++){
    intermediateResult = i;
    System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)

b)声明(重复)内循环:

for(int i=0; i < 1000; i++){
    double intermediateResult = i;
    System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)

哪一个更好,一个还是b

我怀疑重复变量声明(例子b)在理论上会产生更多的开销,但是编译器足够聪明,所以它并不重要.实施例b具有更紧凑的优点,并且将变量的范围限制在其使用的位置.尽管如此,我倾向于根据示例来编码一个.

编辑:我对Java案件特别感兴趣.

java variables performance loops initialization

307
推荐指数
14
解决办法
13万
查看次数

为什么声明内部循环似乎比在Java中声明外部循环更快?

当我检查这个问题时,我不相信它,所以我测试了,似乎是真的.内部循环中的声明似乎比声明外部循环更快.有人可以解释为什么会这样吗?

这是我的测试代码:

public class CycleTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        long iterations = 1000000;
        warmUp(iterations);
        System.out.println("Cycle1");
        double individualTime = getAverageTimePerIterationc1(iterations);
        iterations = 1000;
        double totalTime = getTotalTimec1(iterations);

        System.out.println("ns/iteration: " + individualTime);
        System.out.println("Total time for " + iterations + " runs: " + totalTime);

        System.out.println("Cycle2");
        iterations = 1000000;
        double individualTime1 = getAverageTimePerIterationc2(iterations);
        iterations = 1000;
        double totalTime1 = getTotalTimec2(iterations);

        System.out.println("ns/iteration: " + individualTime1);
        System.out.println("Total time for " + …
Run Code Online (Sandbox Code Playgroud)

java

2
推荐指数
1
解决办法
80
查看次数

Java 编译器是否优化了循环局部变量的创建?

让我们看一下这个例子:

String var;
while (...) {
        var = ...
        // do stuff
}
Run Code Online (Sandbox Code Playgroud)

在本例中,我们创建对对象的引用String,并在循环的每次迭代中为其分配不同的对象。

现在,在另一个例子中:

while (...) {
        String var = ...
        // do stuff
}
Run Code Online (Sandbox Code Playgroud)

如果我们假设编译器很幼稚,它只会在每次迭代时String分配对堆栈上对象的引用。

或者会吗?这就是我的问题 - (a?) Java 编译器是否执行此优化?我总是将对象声明保留在尽可能广泛的范围内,因为我担心这一点,但如果编译器已经这样做了,那么我的鞋子上就少了一颗鹅卵石。

先感谢您!

java compiler-optimization

0
推荐指数
1
解决办法
384
查看次数