我在我的源代码中找到了一些有list.add()
但没有的列表list.remove()
。它会导致内存泄漏吗?我试过了list.clear()
,list=null
但似乎没有效果。应该怎么做才能清除这个列表?请解释...在此先感谢。
问问题
8068 次
2 回答
3
list.clear()
将清除列表中的所有引用。如果它们没有被任何其他对象使用,它将被garbage collector
. 但clear
单独不会delete
对象。我认为问题是,其他一些对象正在使用这些数据,所以它仍然存在于内存中。
发布示例代码,让我们知道确切的问题是什么。
于 2012-11-23T05:58:43.530 回答
1
如果您想清除列表,您可以调用List.removeAll
. 在对象被引用到某个地方之前,它们没有资格被垃圾收集,所以如果 aList.removeAll
没有效果,则意味着列表中的对象仍然在其他地方引用,例如在另一个集合或类中。
你怎么知道List.clear
/List.removeAll
没有效果?手动删除添加到列表中的每个元素不是强制性的。列表可能超出范围,因此被丢弃。
{
Foo a = new Foo(1.0);
Foo b = new Foo(2.0);
{
List<Foo> foo = new ArrayList<Foo>();
foo.add(a); foo.add(b);
} // scope ends for foo, remove was not called but still
// the list is discarded, and the reference it holds to a and b too
}
因此,要清除列表,只需调用List.removeAll
. 如果您希望对列表中的对象进行垃圾回收,则必须确保它们不再在任何地方被引用。
于 2012-11-23T05:59:03.967 回答