9

我不确定这个问题是否与语言无关,所以我将把它作为一个 Java 问题来问。如果你有一个像

for (int i = 0; i < 9; i++) {
    Object obj = new Object;
    // fill object
    // do something with data
}

循环的每次迭代是否都会创建新的内存空间?如果是这样,旧空间是否正在处理?如果没有,做这样的事情是否更有效率

Object obj = new Object;
for (int i = 0; i < 9; i++) {
    // fill object
    // do something with data
}

编辑:更新代码以更好地举例说明问题

4

3 回答 3

9

简短的回答:在 Java 中开发时忽略这些事情,即使这些问题中的大多数是由 JVM 本身隐藏和管理的。

垃圾收集器会知道该做什么,它会根据情况尝试做最好的事情。

此外,您的具体示例对我来说没有多大意义..您能进一步详细说明吗?

于 2012-04-22T22:52:13.010 回答
7

“让垃圾收集器弄清楚”的基本答案是正确的,但您也应该了解这两条语句的效果:

String object = new String();
object = array[i];

是(1)创建一个新的(空)字符串,并将其分配给“object”,然后(2)将值分配array[i]给“object”。

(2) 中的赋值覆盖了您在 (1) 中所做的,因此您创建的第一个 String 永远不会被使用。垃圾收集器最终会回收存储,因此您不必担心它会丢失,但它仍然是不必要的分配;你可以从String object = null;

还要注意Strings 在 Java 中是不可变的,所以一旦分配了一个String对象,就不能改变它的值——你可以让一个String变量引用一个新的对象,但不能修改一个现有的对象。

于 2012-04-22T23:04:07.357 回答
1

为什么不进行一些测试并观察结果?垃圾收集器确实有效,但您不知道它的效果最好。处理大量数据,这种事情可能会影响您的效率。

我认为这个链接将有助于追踪你需要什么。

于 2012-04-22T23:01:28.853 回答