Java Top.

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

在本文中,我们将看看缺乏参考的概念 - 在Java语言中。

我们将解释这些是什么,它们的用途,以及如何正确使用它们。

2.参考薄弱

垃圾收集器在弱到达时清除弱引用的物体。

弱的可达性意味着一个对象既没有强大也没有柔软的指向它的参考。只能通过遍历弱引用来达到该对象。

首先,垃圾收集器清除弱引用,因此不再可访问指示。然后将引用放在参考队列中(如果存在任何相关的存在),我们可以从中获取它。

与此同时,以前的弱到可达到的物体将最终确定。

2.1。弱与软引用

有时弱和软引用之间的差异尚不清楚。软引用基本上是大型LRU缓存。那是,当参考者在不久的将来重复使用时,我们使用软引用

由于软参考作为缓存,即使指具体本身也是不可能继续到达。事实上,如果且才有才有条件,如果且仅当:

  • 该指示不可能达到
  • 最近没有访问软引用

因此,在参考者变得无法访问后,可以在几分钟甚至几小时内使用软参考。另一方面,只要它的指示仍然存在,就可以使用弱引用。

3。用例

正如Java文档所述,弱引用通常用于实施规范化映射。如果只保存特定值的一个实例,则映射被称为canonicate。它不是创建一个新对象,而是在映射中查找现有的一个并使用它。

当然,最着名的这些参考使用是弱小的行图班级。这是实现的地图每个键的接口存储为对给定密钥的弱引用。当垃圾收集器删除密钥时,也会删除与此键关联的实体。

有关更多信息,请退房我们的Dealthashmap指南

他们可以使用的另一个区域是失效的听众问题

发布者(或主题)对所有订阅者(或侦听器)持有强烈的引用,以通知他们发生的事件。金宝搏官网188be当侦听器无法成功取消订阅发布者时出现问题。

因此,侦听器不能被垃圾收集,因为对它的强引用仍然对发布者可用。因此,可能会发生内存泄漏。

解决问题的解决方案可以是对观察者持有薄弱的主题,允许前者在没有需要取消订阅的情况下收集的垃圾收集(请注意这不是完整的解决方案,并且它引入了一些不存在的问题涵盖了这里)。

4.使用弱引用

弱引用由java.lang.ref.okreference.班级。我们可以通过将参考作为参数初始化它。可选地,我们可以提供一个java.lang.ref.referenceutue.

对象引用= new object();roaditueue  Referencequeue = New ReferentioQueue <>();弱势推导弱者1 =新的弱势引用<>(参考文献);弱势推导弱者2 =新的弱势引用<>(参考,参考线);
         

可以通过引用的参考资料来获取得到方法,并使用中手动删除清晰的方法:

Object Iffect2 = WeakReference1.get();弱奖励1.clear();

使用这种参考的安全工作的模式与软引用

Object rigent3 = weastreference2.get();if(rightent3!= null){// gc尚未删除实例} else {// gc已清除实例}

结论

在这个快速的教程中,我们看一下Java中弱引用的低级概念 - 并专注于使用这些的最常见场景。

Java底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
本文评论关闭!