我需要定义一个弱引用Map,它的值是一个Set。我使用 Google 收藏的 MapMaker,如下所示:
Map<Class<? extends Object>, Set<Foo>> map = new MapMaker().weakKeys().weakValues().makeMap();
那么,对于Set<Foo>
,我可以使用普通的HashSet
吗?或者,我是否必须创建一个弱 HashSet,如下所示:
Collections.newSetFromMap(new WeakHashMap<Foo, Boolean>());
为什么?
另一个问题,我的地图的关键是Class对象,Class对象什么时候变得弱可达?换句话说,Class 对象的生命周期是多少?
谢谢。
更新:第一个问题不是很清楚。我担心的是,当我map.get(key).add(foo)
将 foo 实例添加到 Set 时,这是否也会添加对 foo 实例的强引用,从而防止它被 GCed?这就是为什么我想知道是否应该使用弱 HashSet。