ソースコードにリストがありますlist.add()
が、ありませんlist.remove()
。メモリリークを引き起こしていますか?試しlist.clear()
てみlist=null
ましたが、効果がないようです。このリストをクリアするにはどうすればよいですか?親切に説明してください...よろしくお願いします。
2 に答える
list.clear()
リストからすべての参照をクリアします。それらが他のオブジェクトによって使用されていない場合は、によってメモリからクリアされますgarbage collector
。しかし、それだけではオブジェクトclear
はありません。delete
問題は、他のいくつかのオブジェクトがデータを使用しているため、データがまだメモリに残っていることだと思います。
サンプルコードを投稿して、正確な問題が何であるかを知らせてください。
リストをクリアしたい場合は、を呼び出すことができます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
。リストにあったオブジェクトをガベージコレクションする場合は、それらがどこからも参照されていないことを確認する必要があります。