在循环中声明变量(Java优化测试)
我很好奇,如果我在循环外部声明变量,它应该运行得更快,因为当我在循环内部声明变量时,那么在每个循环中,系统需要在内存中分配一个新的整数,这需要时间。 我运行了测试,运行时是: 室外:3600毫秒 内部:1300ms 这与我的预期正好相反。为什么我在里面申报会更快在循环中声明变量(Java优化测试),java,loops,Java,Loops,我很好奇,如果我在循环外部声明变量,它应该运行得更快,因为当我在循环内部声明变量时,那么在每个循环中,系统需要在内存中分配一个新的整数,这需要时间。 我运行了测试,运行时是: 室外:3600毫秒 内部:1300ms 这与我的预期正好相反。为什么我在里面申报会更快 public class DeclarationTestLoop { static double outer = 9500000; static double inner = 100; static void outside(
public class DeclarationTestLoop {
static double outer = 9500000;
static double inner = 100;
static void outside() {
long start = System.currentTimeMillis();
Integer value = 1;
for(double i=0; i<outer; i++) {
for(int k=0; k<inner; k++) {
value++;
value--;
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
static void inside() {
long start = System.currentTimeMillis();
for(double i=0; i<outer; i++) {
for(int k=0; k<inner; k++) {
Integer value = 1;
value++;
value--;
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
public static void main(String[] args) {
System.out.println("outside");
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
outside();
System.out.println("inside");
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
inside();
System.out.println("toggle");
outside();
inside();
outside();
inside();
outside();
inside();
outside();
inside();
outside();
inside();
}
}
公共类DeclarationTestLoop{
静态双外=9500000;
静态双内=100;
外部静态无效(){
长启动=System.currentTimeMillis();
整数值=1;
对于(double i=0;i一个可以解释这一点的元素是Java要找到外部变量,它必须首先检查变量是否定义在它自己的范围内。如果不是,那么它会向外看
事实上,在Java中,JVM是非常优化的,它足够智能,可以检测到您在循环中使用了一个变量,并且每次重新分配它都可以得到优化
在Java中,您不应该围绕“低级技巧”设计代码,因为您不是在用“低级语言”编程.也许使用C你可以尝试这些技巧,但在Java中,这有点毫无意义,可能会降低代码的可读性/可维护性,因为这可能是最好不过的!不要使用System.currentTimeMillis()
而是System.nanoTime()
---结果可重复吗?---您是否给了代码一个机会让其变热?---您是否使用了微型基准线束,例如?---请阅读: