我在源代码中找到了一些列表,其中包含list.add()
但不是list.remove()
。它是否导致内存泄漏?我尝试了list.clear()
和list=null
,但似乎没有效果。
应该怎么做才能清除这个清单?请妥善解释......先谢谢。
答案 0 :(得分:2)
list.clear()
将清除列表中的所有引用。如果它们未被任何其他对象使用,它将由garbage collector
从内存中清除。但clear
单独不会delete
对象。我认为问题是,其他一些对象正在使用数据,所以它仍然存在于内存中。
发布示例代码,让我们知道确切的问题是什么。
答案 1 :(得分:1)
如果要清除列表,只需拨打List.removeAll
即可。在对象被引用到某个地方之前,它们没有资格被垃圾收集,因此如果List.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
即可。如果您希望对列表中的对象进行垃圾回收,则必须确保它们不再被引用。