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 に答える