繁体   English   中英

Java中的内存泄漏。 如何清除清单?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM