《Effective Java》中提到:
第三个常见的内存泄漏来源是监听器和其他回调函数。如果你实现了一个API,客户端可以注册回调函数,但不显式注销它们,那么这些回调函数就会累积,除非你采取一些措施。确保回调函数及时被垃圾收集的最佳方法是仅存储对它们的弱引用,例如,仅将它们作为WeakHashMap中的键来存储。
我是Java的初学者。有人能教我如何在回调函数中创建弱引用,并告诉我它们如何解决内存泄漏问题吗?谢谢。
答:在Java中创建弱引用可以使用java.lang.ref.WeakReference类。通过将回调函数作为键存储在WeakHashMap中,只有当回调函数没有其他强引用时才会被垃圾回收。由于回调函数被存储在WeakHashMap中,因此它们的生命周期受到该Map的生命周期的影响。当回调函数不再需要时,应该显式地从注册中注销,并且从WeakHashMap中删除其键,以便垃圾回收尽快进行。