2016-05-17 10 views
0

Javaガベージコレクタでは、参照のないオブジェクトのクリーニングが行われます。私は単独リンクされたリストの頭がヌルに設定されているのか疑問に思っていました。次のリストノードへの参照がないので、ガベージコレクタはそれをマークして完全なリストをトラバースする必要はありません?headがjavaでnullに設定されていると、リンクリストが削除されますか?

+0

実験では、大きなバイト配列のリストを作成してから、頭をヌルにして繰り返し実行すると簡単に判断できます。それがうまくいくなら、あなたは記憶を消さないでしょう。 – the8472

答えて

1

生きているオブジェクトのガベージコレクションチェック。

オブジェクトの中にはそのリストへの参照を保持しているものの、リスト(およびそのすべてのメンバーは生きています)です。

リストへの参照が存在しなくなった場合。例えば、それをヌルに設定することによって。あなたのリストオブジェクトはもはや生きていません。したがって、ガベージコレクションの対象になります。

あなたのリストにも同じことが適用されます。したがって、そのリストが要素への参照を保持する唯一の場所であった場合、その要素は、リストが「無効化」された後も、それ以上生存していません。その後、リスト要素も収集できます。しかし、リスト要素を参照するその他の生きているオブジェクトがある場合、リスト要素はそのままです。リスト自体は収集されますが。

つまり、ガベージコレクタのように考える必要があります。どのオブジェクトが生存しているかを理解してください。他の何もかも重要ではない。

0

はい。実際、たとえリストが循環していても、リストの外側の任意のリスト要素へのライブ参照がない限り、ガベージコレクションされます。詳細については、hereを参照してください。

関連する問題