私はオブジェクトを持っていますProducer
いくつかのネットワークイベントをリッスンするスレッドを内部的に開始し、多くの場合はメソッドでブロックします。このProducer
オブジェクトでは、私は、が、Producer
が生成できるイベントであるキーと、これらのイベントに登録されているコンシューマのリストであるハッシュマップに含まれています。WeakHashMap <Integer、Vector <IConsumer>>は、IConsumersへの強い参照のみが含まれている場合は収集されますか?
今私はManager
を構成するMain
オブジェクトを持っています。 Manager
は、単一のProducer
と任意の数のConcreteConsumers implements IConsumer
を構成します。 Manager
には、Producer
およびConcreteConsumer
への参照が含まれています。
これは、有効な構造である実際のベクトルへの参照が存在しないようVector<IConsumer>
はWeakHashMap<Integer, Vector<IConsumer>>
にすぐに挿入した後GCの対象にはなりませんか? Producer
およびConcreteConsumer
への参照のみが直接存在します。もしそうなら、私はこれをどのように解決できますか?
次は何が起こるかMain
オブジェクトはすべてConcreteConsumers
は、私が欲しいものであるGC、対象にさせるべきでManager
への参照を低下することがあります。
しかし、実際のProducer
オブジェクトもGCに適格で、内部スレッドがこの時点で実行を停止したいと考えています。これを行う方法に関する提案はありますか?
マップのキーと値の種類は何ですか? - WeakHashMapの*エントリ*は、* key *がもはや通常使用されていなくても自動的に削除されます。 " – JimmyB
@ HannoBinder:ハッシュマップの実際のキーを書くのを忘れました。それは整数です。質問を更新しました。 –