我不确定这个问题是否与语言无关,所以我只想将其作为一个Java问题.如果你有一个像循环
for (int i = 0; i < 9; i++) {
Object obj = new Object;
// fill object
// do something with data
}
Run Code Online (Sandbox Code Playgroud)
内存中的新空间是通过循环的每次迭代创建的吗?如果是这样,旧空间是否被处理?如果没有,做这样的事情会更有效率
Object obj = new Object;
for (int i = 0; i < 9; i++) {
// fill object
// do something with data
}
Run Code Online (Sandbox Code Playgroud)
编辑:更新代码以更好地举例说明问题
简短回答:在Java开发过程中忽略这些事情,即使因为大多数这些问题都是由JVM本身黑盒子和管理的.
垃圾收集器将知道该做什么,并将根据情况尝试做最好的事情.
另外你的具体例子对我来说没什么意义..你能进一步详细说明吗?
"让垃圾收集器搞清楚"的基本答案是正确的,但你也应该理解这两个语句的效果:
String object = new String();
object = array[i];
Run Code Online (Sandbox Code Playgroud)
是(1)创建一个新的(空)字符串,并将其分配给"对象",然后(2)将值赋给array[i]"对象".
(2)中的赋值会覆盖您在(1)中所做的操作,因此您创建的第一个String永远不会被使用.垃圾收集器最终将回收存储,因此您不必担心它会丢失,但它仍然是一个不必要的分配; 你可以刚开始String object = null;
另请注意,Strings在Java中是不可变的,因此一旦分配了String对象,就无法更改其值 - 您可以使String变量引用新对象,但不能修改现有对象.