smt*_*tsp 2 java performance memory-management memory-efficient
这可能是一个重复的问题,但我无法找到我正在搜索的内容.如果存在,抱歉重复.
我想知道如果以下部分代码在内存分配方面是相同的.
//first
int n = some_number;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
int a = something;
}
}
//second
int i, j, a;
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
a = something;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果java 在第一个代码中分配变量a n ^ 2次和j n次,或者两者仅在第二个代码中分配一次.
我在java中尝试了几次,但结果不一致,就像在一次试验中,第一次是8秒,第二次是9秒,在另一次试验中反过来.所以,我想确定它们是否相等,
谢谢
查看是否存在差异的一种简单方法是检查字节码.
第一个版本编译为:
public static void f();
Code:
0: bipush 100
2: istore_0
3: iconst_0
4: istore_1
5: goto 26
8: iconst_0
9: istore_2
10: goto 18
13: iconst_3
14: istore_3
15: iinc 2, 1
18: iload_2
19: iload_0
20: if_icmplt 13
23: iinc 1, 1
26: iload_1
27: iload_0
28: if_icmplt 8
31: return
Run Code Online (Sandbox Code Playgroud)
而第二个编译为:
public static void g();
Code:
0: bipush 100
2: istore_3
3: iconst_0
4: istore_0
5: goto 26
8: iconst_0
9: istore_1
10: goto 18
13: iconst_3
14: istore_2
15: iinc 1, 1
18: iload_1
19: iload_3
20: if_icmplt 13
23: iinc 0, 1
26: iload_0
27: iload_3
28: if_icmplt 8
31: return
Run Code Online (Sandbox Code Playgroud)
如果你仔细比较它们,你会发现它们基本相同.
在风格上,我认为最好尽可能地将变量声明为第一次使用.考虑到这一点,我会在第二个版本中选择第一个版本.