1

我正在为安卓计算。我尽量小心内存泄漏,因为我的程序正在处理大量数据,而垃圾收集器似乎很忙。

我想知道之间是否有区别:

for (int i=0;i<200;i++) 
{
   MyObject myobject = new MyObject(i,i+1);
   myobject.writeToDatabase();
}

MyObject myobject=null;
for (int i=0;i<200;i++) 
{
    myobject = new MyObject(i,i+1);
    myobject.writeToDatabase();
}

和(避免使用构造函数)

MyObject myobject=new MyObject(0,1);
myobject.writeToDatabase();
for (int i=1;i<200;i++) 
{
   myobject.setFirstValue(i);
   myobject.setSecondValue(i+1);
   myobject.writeToDatabase();
}
4

1 回答 1

3

第三种选择是迄今为止最好的。在这种情况下,其他两个选项在 Java 中几乎相同。

如果您不是每次都创建一个新对象,而是再次使用旧对象,那么您正在为垃圾收集器减轻大量工作。这是提高性能和内存管理效率的好方法。

在前两个选项中,您基本上是在做同样的事情:在循环开始时创建一个新对象,并在循环结束时让它被销毁。您继续对指针使用相同的变量这一事实并没有太大的区别。

编辑:

正如Stochastically所说,您的代码不会导致任何内存泄漏,只是因为垃圾收集器将确保不会发生这种情况。我猜测毕竟有一些技巧会导致内存泄漏,但在正常情况下不会发生。但正如我所解释的,您仍然可以通过使用更少的对象来提高垃圾收集效率。

于 2013-04-13T17:39:07.063 回答