簡體   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