关于内存使用和变量实例化哪个更好还是没有区别:
这个
for(int i = 0; i < someValue; i++)
{
Obj foo = new Obj();
Use foo.....
}
相对于:
Obj foo;
for(int i = 0; i < someValue; i++)
{
foo = new Obj();
Use foo.....
}
最佳答案
没有区别。编译器将优化内存使用方面的任何潜在差异。
如果您编译(使用javap -c
)这两个示例并比较字节码,您会发现字节码是相同的。当然,这取决于 JVM 版本。但由于这个示例非常简单,可以安全地假设两者都不比另一个更有效。
示例 1:
代码:
public class example1 {
public static void main(String[] args) {
for (int i=0; i<10; i++) {
Object a = new Object();
}
}
}
字节码:
public class example1 extends java.lang.Object{
public example1();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: bipush 10
5: if_icmpge 22
8: new #2; //class java/lang/Object
11: dup
12: invokespecial #1; //Method java/lang/Object."<init>":()V
15: astore_2
16: iinc 1, 1
19: goto 2
22: return
}
例子2:
代码:
public class example2 {
public static void main(String[] args) {
Object a;
for (int i=0; i<10; i++) {
a = new Object();
}
}
}
字节码:
public class example2 extends java.lang.Object{
public example2();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_2
2: iload_2
3: bipush 10
5: if_icmpge 22
8: new #2; //class java/lang/Object
11: dup
12: invokespecial #1; //Method java/lang/Object."<init>":()V
15: astore_1
16: iinc 2, 1
19: goto 2
22: return
}
关于java - Java 中的内存效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10768813/