如何避免回调中的内存泄漏?

unj2:

有效的Java说:

内存泄漏的第三个常见来源是侦听器和其他回调。如果您在客户端注册回调但不显式注销回调的情况下实现API,则除非您采取某些措施,否则它们会累积。确保回调被及时垃圾回收的最佳方法是仅存储对其的弱引用,例如,通过仅将它们作为键存储在WeakHashMap中。

我是Java的初学者。有人可以教我如何在回调中创建弱引用,并告诉我它们如何解决内存泄漏问题吗?谢谢。

阿米尔·阿富汗尼:

阅读这篇文章

关键要点是:

您可以将直接引用视为强大的引用,不需要额外的代码即可创建或访问该对象。其余三种引用类型是在java.lang.ref包中找到的Reference类的子类。软引用由SoftReference类提供,弱引用由WeakReference类提供,幻像引用由PhantomReference提供。

软引用的作用类似于数据缓存。当系统内存不足时,垃圾收集器可以任意释放唯一引用为软引用的对象。换句话说,如果没有对对象的强引用,则该对象是释放对象。垃圾收集器需要在释放OutOfMemoryException之前释放所有软引用。

弱引用比软引用弱。如果对对象的唯一引用是弱引用,则垃圾收集器可以随时回收对象使用的内存。不需要内存不足的情况。通常,对象使用的内存在垃圾收集器的下一遍中回收。

虚拟引用与清理任务有关。它们在垃圾回收器执行终结处理并释放对象之前立即提供通知。考虑它是在对象内执行清理任务的一种方法。

其次是WeakListModel清单,我不会发布该清单以避免混淆此响应。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章