变量性能 - java
Variables performance - java
所以我有一个应用程序可以做很多数学运算,因此有大量的临时变量。我想知道的是:当我在循环之前声明变量然后重用它(代码 1)时,是否有任何性能差异,或者在循环内声明它更好(代码 2)?该变量仅在循环内部需要,n
最多可达数万。还是将它们作为全局变量更好?循环也被调用了不止一次。
代码 1:
double temp;
for (int i = 0; i < n; i++) {
temp = ...;
}
代码 2:
for (int i = 0; i < n; i++) {
double temp = ...;
}
感谢提示。
不,这在性能上没有区别。 (既不是计算方面的,也不是内存方面的。)声明在运行时不是"executed"。
事实上,以下两个片段生成了完全相同的字节码:
// Snippet 1 // Snippet 2
int i; int i;
double temp; for (i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) { double temp = i;
temp = i; }
}
// Generates // Generates
0: iconst_0 0: iconst_0
1: istore_1 1: istore_1
2: iload_1 2: iload_1
3: iconst_5 3: iconst_5
4: if_icmpge 16 4: if_icmpge 16
7: iload_1 7: iload_1
8: i2d 8: i2d
9: dstore_2 9: dstore_2
10: iinc 1, 1 10: iinc 1, 1
13: goto 2 13: goto 2
那么,这应该可以回答您关于性能的问题。
现在,我仍然会选择第二种方法,因为它限制了 temp
的范围,即它使命名空间混乱最少。
通常 declare variables in the smallest scope possible(在循环内部)更好。这样,对象引用就可以更早地进行垃圾回收,因此您的代码的内存效率会更高。当声明原始变量的方法离开堆栈时,原始变量将被释放,但最好在尽可能有限的范围内声明它们。
至于速度方面的考虑,应该没有什么区别。 these answers中的字节码分析表明,最终没有区别。
参考资料
- Declaring variables inside or outside of a loop
- Declaring variables inside or outside of a loop
- Which loop has better performance? Why?
很难说两者之间是否存在性能差异,您可以测量它,但我想您不会发现太大差异(真的取决于您的工作和您的编译器)
但是,我认为代码选项 2 是更好的做法,因为它仅在循环中使用,因此您不需要在循环之外对该变量进行任何更广泛的范围界定。
所以我有一个应用程序可以做很多数学运算,因此有大量的临时变量。我想知道的是:当我在循环之前声明变量然后重用它(代码 1)时,是否有任何性能差异,或者在循环内声明它更好(代码 2)?该变量仅在循环内部需要,n
最多可达数万。还是将它们作为全局变量更好?循环也被调用了不止一次。
代码 1:
double temp;
for (int i = 0; i < n; i++) {
temp = ...;
}
代码 2:
for (int i = 0; i < n; i++) {
double temp = ...;
}
感谢提示。
不,这在性能上没有区别。 (既不是计算方面的,也不是内存方面的。)声明在运行时不是"executed"。
事实上,以下两个片段生成了完全相同的字节码:
// Snippet 1 // Snippet 2
int i; int i;
double temp; for (i = 0; i < 5; i++) {
for (i = 0; i < 5; i++) { double temp = i;
temp = i; }
}
// Generates // Generates
0: iconst_0 0: iconst_0
1: istore_1 1: istore_1
2: iload_1 2: iload_1
3: iconst_5 3: iconst_5
4: if_icmpge 16 4: if_icmpge 16
7: iload_1 7: iload_1
8: i2d 8: i2d
9: dstore_2 9: dstore_2
10: iinc 1, 1 10: iinc 1, 1
13: goto 2 13: goto 2
那么,这应该可以回答您关于性能的问题。
现在,我仍然会选择第二种方法,因为它限制了 temp
的范围,即它使命名空间混乱最少。
通常 declare variables in the smallest scope possible(在循环内部)更好。这样,对象引用就可以更早地进行垃圾回收,因此您的代码的内存效率会更高。当声明原始变量的方法离开堆栈时,原始变量将被释放,但最好在尽可能有限的范围内声明它们。
至于速度方面的考虑,应该没有什么区别。 these answers中的字节码分析表明,最终没有区别。
参考资料
- Declaring variables inside or outside of a loop
- Declaring variables inside or outside of a loop
- Which loop has better performance? Why?
很难说两者之间是否存在性能差异,您可以测量它,但我想您不会发现太大差异(真的取决于您的工作和您的编译器)
但是,我认为代码选项 2 是更好的做法,因为它仅在循环中使用,因此您不需要在循环之外对该变量进行任何更广泛的范围界定。