当前位置: 首页 > 网络应用技术

Java中强,柔软,虚弱和虚拟对象引用的详细说明和案例演示

时间:2023-03-06 21:59:56 网络应用技术

  每种编程语言都有在内存中操作元素的方法,例如C和C ++中的指针,以及Java中的“参考”。所有内容都被视为Java中的对象,但是我们操作的标识符实际上是参考的参考。目的。

  甚至“参考”也是一类。此类的援引表示softrefereference,fealReference,phantomReference的子类别。通过对与参考对象关联的对象的引用,如果对象被回收,则它将返回null.NETE。请注意,幻象Reperference的GET GET始终返回null。

  在JDK1.2之前,Java中的定义非常传统:如果参考类型数据中存储的值表示另一个内存的起始地址,则称为该内存表示参考。可以通过参考计数算法或可以达到形而上学分析算法的参考链的确定对象,确定对象生存的对象与“参考”有关。

  在JDK1.2之前,只有两个状态被“引用”和“不引用”,以描述一些“饮食无味和废弃”的物体。我们希望描述这样的对象:当记忆空间足够时,可以是保留在记忆中;如果收集垃圾后,存储空间仍然非常紧张,则可以放弃这些对象。许多系统缓存功能符合此类应用程序场景。

  因此,在JDK.1.2之后,Java将参考文献的概念扩展到:: strongReference,softreference,softreference,feepReference,fealomreferference,phantomreferencethe参考的强度转弯,后三个参考文献在Java.lang.lang.ref包中。

  实际上,在java.lang.ref软件包中有一个最终的(继承),最终确定器(继承)和参考名称。实际上,它们都与GC第二标签期间的Java源代码分析有关。

  强参考是指程序代码中的共同存在。它是指创建对象并将此对象分配给参考变量。它不会像其他三个引用那样描述特定类别。对于强参考对象,即使内存不足,JVM也宁愿抛出Outofmemoryerror(OOM)错误而无需回收此对象。

  例如:

  如果要中断引用和某个对象之间的关联,则可以显示对NULL的引用。这样,JVM将在正确的时间恢复对象。例如,各种收集的删除方法。

  softreference< People > AskRef =新的softreference< People >(OBJ)

  软引用用于描述一些仍然有用但不必要的对象。仅使用Softreference类的对象是软参考对象(软可以到达对象)。如果对象仅具有软引用并且存储空间足够,则不会回收垃圾回收;如果内存空间不足,则将回收这些。

  它通常用于缓存操作。当某个对象被标记为软报价时,在内存足够时不会回收内存,并且内存不足以恢复,例如网页缓存,图片缓存等等,并且软引用将确保确保在虚拟机被扔出OutofMemoryError之前已经清除了它。

  软参考对象可以与参考按钮结合使用。当JVM由软参考对象引用的对象回收时,该软参考对象将放置在相关队列中。

  虚弱< People > 参考=新的弱率< People >(obj);

  弱参考也用于描述非必要的对象。仅使用弱的对象是一个弱参考对象(弱可以到达对象)。与软引用相比,弱参考对象的生命周期更短。内存就足够了,一旦将垃圾回收扫描到下次弱参考,它将被回收。弱参考。

  如果对象通过弱retrence GET方法回收,则将返回null。

  可以将弱参考对象与参考类型组合使用。当弱参考对象引用的对象回收JVM时,该弱参考对象将放置在相关队列中。

  Java中有弱的HashMap类,threadlocalmap内部节点条目中的threadLocal中。它们都是虚弱的实施。他们的键与弱参考对象相关联。

  幻影< People > PR =新的幻影< People > (对象,参考);

  虚拟引号也称为幽灵参考或幻影参考。这是最弱的参考关系。虚拟引用和软引用和弱参考之间的差异之一是必须与参考类别结合使用。

  无法通过GET获得参考,但实际上,虚拟使用的使用实际上是由Holding对象引用的,但是PhantomReference的GET方法的实现将始终返回到NULL。

  当该对象由收集器回收时,对象关联的关联的唯一目的是将其添加到相关的参考队列中。因此,DirectByteBuffer和其他可以申请的对象可用于堆UP内存的对象与对象清洁器与对象清洁器相关联创建对象清洁器。通过参考队列,此时,GC将判断队列中的对象,并清理申请CLEA的清洁方法的应用程序。

  一个对象与虚拟引号相关联,可能会影响其生命周期。使用潜在的内存泄漏风险,因为JVM不会自动帮助我们释放,因此我们必须确保其指向的桩对象无法达到无法到达。

  代码显示如下:

  在测试之前,我们首先将VM参数设置为:-XMS2M -XMX3M以指示虚拟机启动内存2M,最大内存3M

  软引用,弱参考和虚拟使用可以与参考队列一起使用。实际上,它与对象和引用中的参考字段相关联。

  当需要回收弱参考和软引用的对象时,JVM首先将内部参考字段设置为null,然后将软引用或弱参考对象添加到关联的队列中。然后在软引用或弱参考之前将堆对象添加到参考队列中。

  不同的用途(幻影)必须与参考类别相结合。如果启动了GC,则将参考对象传递给其参考队列,但是使用的参考字段将不会设置为null。对虚拟引用的虚拟内存空间的虚拟引用将不会发布。我们可以手动调用phantomReference.clear()方法将矮人存储空间释放到目标。

  在与报价队列关联的类构造函数中,父母参考的构造函数称为:

  当GC时,软引用和弱参考对象的引用将为空并添加参考队列,但是虚拟引号的引用不会为空。我们使用断点调试测试。

  软引号测试:

  当我们检查Softreference1中的数据时,您可以看到已将参考字段放置为null

  引号测试弱:

  让我们检查feebReference1中的数据,您可以看到已将参考字段放置为null

  测试一下:

  当我们在PhantomReference1中检查数据时,您可以看到参考字段并不是为无效,从而导致内存泄漏。

  让我们看一下清晰方法的源代码:

  将参考字段放为空,以便可以真正回收上面的匿名数组。因此,在跟踪对象后,应调用清晰的方法清除参考,但是即使这样做,也需要清理下一个GC。这已经是改变对象的生命周期。

  即使可以自动回收弱参考和软引用,如果虚拟机为时已晚,无法回收弱参考或软参考对象,java.lang.outofmemoryerror:java heap空间是异常的。物体的生命周期,甚至导致内存泄漏。

  对于四个引号,我们现在知道其中一些引号,但是在java.lang.ref软件包中有一个最终回报(继承的参考),最终确定器和其他类别。相关,您可以阅读本文。您可以详细阅读本文,以了解这些类的操作:Java中的最终器类和GC第二个标记期间的Java源代码分析。