gpt4 book ai didi

java - 在将 ArrayList 分配给另一个新数组之前,是否必须将其设置为 null?

转载 作者:行者123 更新时间:2023-12-01 22:51:27 26 4
gpt4 key购买 nike

我有一个名为 mHomeworks 的数组。对于 onResume,我调用:

public void onResume() {
super.onResume();
((HomeworkAdapter)getListAdapter()).notifyDataSetChanged();
mHomeworks = HomeworkLab.get(getActivity()).getHomework();//update list
}

关于内存管理,我应该调用:

    mHomeworks.removeAll(mHomeworks);
mHomeworks = null;

最佳答案

任何没有引用的对象都可以进行垃圾回收,而无需您对其执行任何操作。因此,通常情况下, mHomeworks = HomeworkLab.get(getActivity()).getHomework(); 就可以了,因为它将清除对旧对象的引用并允许回收内存(假设它不是引用其他地方)。

异常(exception)情况是,如果 mHomeworks 在新作业之前和之后耗尽了您的大量可用内存。在新分配发生之前,旧内存将无法被垃圾收集,因此两个对象需要在内存中同时存在一小段时间。如果没有足够的内存,这可能会导致速度变慢或引发 OutOfMemory 异常。在这种情况下,mHomeworks = null; 足以释放内存。当然,您可能需要有非常大的列表才能做到这一点。

您绝对不想做的是mHomeworks.removeAll(mHomeworks);,因为这将导致列表的并发修改。在内部,它会在迭代列表时从列表中删除某些内容,从而破坏迭代器并引发异常。

关于java - 在将 ArrayList 分配给另一个新数组之前,是否必须将其设置为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24683234/

26 4 0