【发布时间】:2017-10-22 08:00:57
【问题描述】:
我有一个运行很长时间的函数,我在该函数中声明并分配了一个对象。现在,据我所知,只要该函数正在运行,该对象将至少在内存中存在,之后如果没有其他对象引用它,它将可用于垃圾收集。现在,我希望这个对象在函数完成运行之前可用于垃圾收集。在编码器中:
public void foo(){
String title;
Object goo=getObject(); //getObject is some other function
//which returns Object and can be null and I want Object to be in memory from here
if(goo!=null)title=goo.getString("title");
//after the last line of code I want Object to be available for garbage
// collection because below is a long running task which doesn't require Object.
for(int i=0;i <1000000;i++) //long running task
{
//some mischief inside with title
}
}
现在从上述任务中,我希望 Object 在 for 循环开始之前可用于垃圾收集。我可以在 for 循环之前将两行代码放在花括号内吗?如果没有,我该怎么做才能完成这项任务?
【问题讨论】:
-
对象重驻留在内存中吗?这是您想要这样做的原因吗?
-
我已经问过这个问题了,原因是为什么要在内存中保留不必要的对象,不管它们是大是小。
-
对于小对象和低内存占用且没有内存紧缩,您无需关心。此外,GC 是非确定性的。因此,即使将其分配给 null 也不能保证它会立即被收集。