在循环中创建新对象的效率

时间:2012-04-22 22:49:27

标签: java memory loops

我不确定这个问题是否与语言无关,所以我只是将其视为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
}

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

3 个答案:

答案 0 :(得分:9)

简短的回答:在Java开发过程中忽略这些事情,即使因为大多数问题都是由JVM本身黑盒子和管理的。

垃圾收集器会知道该怎么做,并会根据情况尽力做到最好。

另外你的具体例子对我来说没什么意义..你能进一步详细说明吗?

答案 1 :(得分:7)

“让垃圾收集器搞清楚”的基本答案是正确的,但你也应该理解这两个陈述的效果:

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

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

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

开始

另请注意,String在Java中是不可变的,因此一旦分配了String对象,就无法更改其值 - 您可以将String变量引用到新对象,但您无法修改现有对象。

答案 2 :(得分:1)

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

我认为this link有助于追踪您的需求。