WeakHashMap<Integer,Vector<IConsumer>>,如果只引用IConsumers,Vector会被收集吗?



我有一个对象Producer,它在内部启动一个线程,该线程将侦听一些网络事件,并且在大多数情况下阻塞receive()方法。在这个Producer对象中,我有一个包含散列映射的WeakHashMap<Integer, Vector<IConsumer>>,其中键是Producer可以产生的事件,值是在这些事件上注册的消费者列表。

现在我有一个Main对象,它构造了一些Manager。CCD_ 8构造一个单独的CCD_ 9和任意数量的ConcreteConsumers implements IConsumerManager包含对ProducerConcreteConsumer的引用。

这是一个有效的构造吗?Vector<IConsumer>在插入WeakHashMap<Integer, Vector<IConsumer>>后是否没有资格立即进行GC,因为没有引用实际矢量?只有对ProducerConcreteConsumer的直接引用。如果是,我该如何解决


接下来,Main对象将放弃对Manager的引用,这将导致所有ConcreteConsumers都有资格进行GC,这正是我想要的。

但是,我还希望实际的Producer对象符合GC的条件,并且内部线程此时停止执行。有什么建议吗

它是WeakHashMap中具有弱引用的键。该值被强烈引用。在没有对密钥的强引用(在本例中为Integer)后,该条目将被删除一段时间。这是Integer的同一个实例,而不仅仅是具有相同值的实例。值类型作为WeakHashMap的键并不是特别有用。

WeakHashMap作为缓存并不有用(您希望使用SoftReference,可能还有其他人的库)。)

最新更新