Java中的弱引用
最后修改:8月8日,2020年8月8日
1.概述
在本文中,我们将看看缺乏参考的概念 - 在Java语言中。
我们将解释这些是什么,它们的用途,以及如何正确使用它们。
2.参考薄弱
垃圾收集器在弱到达时清除弱引用的物体。
弱的可达性意味着一个对象既没有强大也没有柔软的指向它的参考。只能通过遍历弱引用来达到该对象。
首先,垃圾收集器清除弱引用,因此不再可访问指示。然后将引用放在参考队列中(如果存在任何相关的存在),我们可以从中获取它。
与此同时,以前的弱到可达到的物体将最终确定。
2.1。弱与软引用
有时弱和软引用之间的差异尚不清楚。软引用基本上是大型LRU缓存。那是,当参考者在不久的将来重复使用时,我们使用软引用。
由于软参考作为缓存,即使指具体本身也是不可能继续到达。事实上,如果且才有才有条件,如果且仅当:
- 该指示不可能达到
- 最近没有访问软引用
因此,在参考者变得无法访问后,可以在几分钟甚至几小时内使用软参考。另一方面,只要它的指示仍然存在,就可以使用弱引用。
3。用例
正如Java文档所述,弱引用通常用于实施规范化映射。如果只保存特定值的一个实例,则映射被称为canonicate。它不是创建一个新对象,而是在映射中查找现有的一个并使用它。
当然,最着名的这些参考使用是弱小的行图班级。这是实现的地图每个键的接口存储为对给定密钥的弱引用。当垃圾收集器删除密钥时,也会删除与此键关联的实体。
有关更多信息,请退房我们的Dealthashmap指南。
他们可以使用的另一个区域是失效的听众问题。
发布者(或主题)对所有订阅者(或侦听器)持有强烈的引用,以通知他们发生的事件。金宝搏官网188be当侦听器无法成功取消订阅发布者时出现问题。
因此,侦听器不能被垃圾收集,因为对它的强引用仍然对发布者可用。因此,可能会发生内存泄漏。
解决问题的解决方案可以是对观察者持有薄弱的主题,允许前者在没有需要取消订阅的情况下收集的垃圾收集(请注意这不是完整的解决方案,并且它引入了一些不存在的问题涵盖了这里)。
4.使用弱引用
弱引用由java.lang.ref.okreference.班级。我们可以通过将参考作为参数初始化它。可选地,我们可以提供一个java.lang.ref.referenceutue.:
对象引用= new object();roaditueue
可以通过引用的参考资料来获取得到方法,并使用中手动删除清晰的方法:
Object Iffect2 = WeakReference1.get();弱奖励1.clear();
使用这种参考的安全工作的模式与软引用:
Object rigent3 = weastreference2.get();if(rightent3!= null){// gc尚未删除实例} else {// gc已清除实例}
结论
在这个快速的教程中,我们看一下Java中弱引用的低级概念 - 并专注于使用这些的最常见场景。