2016-04-04 9 views
0

は、私がこのような何かを言いますメソッドA()私は2つのオブジェクトを持つリストのリファレンスを持っていますスタッフ( "重要")スタッフのJava GarbageCollectionとコレクション

メソッドB()のリストにStuff( "important")への参照を追加します。 この時点で、オブジェクトスタッフ(「重要ではない」)にアクセスできなくなりました。 のメソッドA()のリストにもアクセスできません。

しかし、リストには実際に到達可能なオブジェクトへの参照、つまりスタッフ(「重要」)が含まれています。

all_the_stuff_to_doリストがクリアされ、スタッフ(「ないことが重要」)オブジェクト?

の方法Aへの呼び出しの直後ですか?または、それはの最後にありますか?MethodB?またはスタッフ( "重要")への参照が含まれているので、それは決してないですか?

+1

あなたはどちらの参考文献を参照していますか? 'all_the_stuff_to_do'、' important_stuff_to_do'または 'stuff_to_do'ですか? – Cypher

+0

「スタッフ(2)」とはどういう意味ですか?どのような方法で呼んでいますか? –

+0

私はあなたが意図したと思うと思います: 'important_stuff_to_do.add(methodA()。get(i));'あなたのforループin methodB – JimmyJames

答えて

1

MethodAへの呼び出しの直後に(all_the_stuff_to_doはガベージコレクションされますか?) それはMethodBの最後にあるのでしょうか?プログラムの終わりまでまだアクティブなStuff( "important")オブジェクトへの参照が含まれているので、決してそうではありませんか?

ガベージコレクションは、通常、優先度の低いスレッドで行われます。何も実行されていない場合、ガベージコレクタが実行される可能性があります。

VMが低オンまたはメモリ不足の場合、ガベージコレクタはプログラムの即時の必要性のためにメモリを回復する必要があるため、最も優先度の高いスレッドとしてすぐに実行できます。

したがって、MethodAの呼び出しの直後に収集されますか?いいえ、電話番号get(0)の後に回収されますか?可能ですが、ありそうもありません。 MethodBの末尾に?可能ですが、ありそうもありません。プログラムの最後にはまだアクティブですか?可能ですが、プログラムがメモリ不足にならず、アイドルになったことがない場合にのみ発生します。

"Stuff(" important ")Objectのコピーがリストに含まれているということは、リストが収集されるかどうかとは無関係です。アクセス可能なオブジェクトがリストを参照していない場合、そのリストはガベージコレクションの対象となります。

リストはコレクション中に#clear()となりますか?いいえ、必要はありません。それがユーザー定義のコレクションだった場合、clearメソッドは、リストに別の参照を追加するなど、何らかの処理を行うことができました。ガベージコレクションを混乱させるでしょう。代わりに、それはちょうど収集され、リストが参照するオブジェクトは1回少ない時間で参照されます。それは "Stuff(" important ")Object"を含みます...参照カウントは減少しますが、参照はまだ存在するのでクリアされません。

+0

ありがとう、これは私が探していたawnserです – Xtroce

1

コレクションには、追加したオブジェクトへの参照が含まれています。それがもはや到達可能になるか、コレクションからオブジェクトを削除するまで、それらは到達可能になります。プログラムがそうでなければ確実に動作する方法を考えることができますか?

0

new Stuff("important")ここにnewキーワードはオブジェクトの作成に責任があり、StuffオブジェクトはコレクションList <Stuff> important_stuff_to_doによって保持されます。これで、このコレクションには、作成した2つのオブジェクトの参照が保持されます。 コレクション定義に従って

は、すべて私たちはCollectionは、単一のエンティティとしてオブジェクトの同じタイプの複数のオブジェクトのグループであることを知っています。

ここではこれら2つのオブジェクトはまだ到達可能あるので。だから、ノーGarbage Collectionが実行されます

new Stuff("important") 
new Stuff("not important") 

注: - ガベージコレクションが完全に到達不能であるオブジェクトのみ(孤児の一種)を行います。 Collectionは、追加されるオブジェクトのコピー/クロッピングを行わないため、オブジェクトが孤立していません。

結論: - このシナリオでは、ごみは実行されません。ありがとうございました

+0

@Vikrant_Kashyap私はあまりにも複雑で説明したと思いますが、問題はそれ以上のものは届かないということです。 – Xtroce

関連する問題