我们说我有一个看起来像这样的参考树:
root => WeakHashMap<View, Binder> => Binder => View
// by WeakHashMap I mean keys (Views) are referenced by WeakReferences
// View is only referenced by Binder
会收集View
(和Binder
)吗?或者从Binder
到View
的引用也必须是弱的吗?
它在代码中的外观如何:
class SomeClass {
private static final Map<View, Binder> binders = new WeakIdentityHashMap<>();
// (...)
}
class Binder {
private final View target;
public Binder(View target) {
this.target = target
}
// (...)
}
答案 0 :(得分:2)
没有
http://docs.oracle.com/javase/7/docs/api/java/util/WeakHashMap.html
实施说明:WeakHashMap中的值对象由。持有 普通的强引用。因此,应该注意确保这一点 值对象不直接强烈引用自己的键 或间接地,因为这将防止密钥被丢弃。 请注意,值对象可以通过以下方式间接引用其键 WeakHashMap本身;也就是说,值对象可能强烈引用一些 其他关键对象,其关联的值对象反过来强烈 指第一个值对象的键。如果是地图中的值 一种方法,不要依赖地图持有强有力的参考 处理这个问题就是将值本身包装在WeakReferences中 在插入之前,如:m.put(key,new WeakReference(value)),和 然后解开每一个。
WeakReference从value到key:
是。
http://docs.oracle.com/javase/7/docs/api/java/lang/ref/package-summary.html#reachability
如果一个对象既不强也不柔和,则它是弱可达的 可以到达,但可以通过遍历弱引用来达到。当。。。的时候 对象是一个弱可达对象的弱引用 有资格完成定稿。