[英]Memory leak in Java. How to clear list?
我在源代码中找到了一些列表,其中包含list.add()
但不是list.remove()
。 它是否导致内存泄漏? 我尝试了list.clear()
和list=null
但似乎没有效果。 应该怎么做才能清除这个清单? 请解释......先谢谢。
list.clear()
将清除列表中的所有引用。 如果它们没有被任何其他对象使用,它将被garbage collector
从内存中清除。 但单独clear
不会delete
对象。 我认为问题是,其他一些对象正在使用数据,因此它仍然存在于内存中。
发布示例代码,让我们知道确切的问题是什么。
如果要清除列表,只需调用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
。 如果希望对列表中的对象进行垃圾回收,则必须确保它们不再在任何地方引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.