2

我在我的源代码中找到了一些有list.add()但没有的列表list.remove()。它会导致内存泄漏吗?我试过了list.clear()list=null但似乎没有效果。应该怎么做才能清除这个列表?请解释...在此先感谢。

4

2 回答 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 回答