可能重复:
如何避免回调中的内存泄漏?
有效的Java说:
内存泄漏的第三个常见来源是侦听器和其他回调.如果您实现客户端注册回调但未明确注销回调的API,则除非您采取某些操作,否则它们将累积.确保回调被及时垃圾回收的最佳方法是仅存储对它们的弱引用,例如,通过仅将它们存储为WeakHashMap中的键.
我无法理解这一点.有人能解释一下吗?
持有对对象的弱引用并不能阻止它被垃圾收集——如果不再有对该对象的强引用,最终它将被垃圾收集,并且您将无法再通过已存储的访问它WeakReference。谷歌Java weak references tutorial了解更多信息。