【发布时间】:2017-10-09 14:26:21
【问题描述】:
Java 编译器是否进行了优化,并且在不需要时不创建新的对象/引用?
例如
public class Foo {
public void foo(Object[] data) {
for(int i=0; i<data.length; i++) {
Object d = data[i]; // <-- here
bar(d);
}
}
private void bar(Object o) {
//...
}
}
是否与:
public class Foo {
public void foo(Object[] data) {
for(int i=0; i<data.length; i++) {
bar(data[i]); // <-- and here
}
}
private void bar(Object o) {
//...
}
}
在运行时?
【问题讨论】:
-
在两个 sn-ps 中都不涉及对象创建......唯一保存的(是的,可能按原样优化)是局部变量。要查看编译器是否实际生成相同的代码,请查看字节码。
标签: java memory-management compiler-optimization