首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

引用引用的区别_强引用引用引用引用的区别

void main(String[] args) throws InterruptedException { User user = new User(1, "debo"); // 建立User对象的引用...第二次由于分配了较大的内存,导致GC,这时候由于内存资源紧张,引用被回收了,也就是虽然User对象有一个引用引用着它,但User对象在此条件下也会被GC回收。...所以引用的对象在一定条件下可被回收,故引用对象不会导致内存溢出。...引用到底有没有被回收,可以通过给引用一个ReferenceQueue来跟踪,将上面的代码片段稍作修改,如下: import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue...,所以ReferenceQueue为空,第二次GC回收了引用对象,所以ReferenceQueue队列不为空,那为什么可以强转成UserSoftReference呢?

1.2K10

引用引用引用,虚引用

引用引用引用,虚引用 ⽆论是通过引⽤计数法判断对象引⽤数量,还是通过可达性分析法判断对象的引⽤链是否可达,判定对象的存活都与“引⽤”有关。...引用可用来实现内存敏感的高速缓存。 引⽤可以⼀个引⽤队列(ReferenceQueue)联合使⽤,如果引⽤所引⽤的对象被垃圾回收,JAVA虚拟机就会把这个引用加入到与之关联的引⽤队列中。...引用(WeakReference) 如果⼀个对象只具有引⽤,那就类似于可有可无的⽣活⽤品。 引⽤与引⽤的区别在于: 只具有引⽤的对象拥有更短暂的⽣命周期。...引⽤可以⼀个引⽤队列(ReferenceQueue)联合使⽤,如果引⽤所引⽤的对象被垃圾回收,Java虚拟机就会把这个引⽤加⼊到与之关联的引⽤队列中。...虚引用主要用来跟踪对象被垃圾回收的活动。 虚引⽤与引⽤引⽤的⼀个区别在于: 虚引⽤必须引⽤队列(ReferenceQueue)联合使用。

8210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你会使用引用引用吗?

    戳这里,加关注哦~ 这篇文章我们来聊聊引用引用对内存性能的帮助,大家在平时的开发过程中,对于内存性能做过哪些调优工作,其中的一个方法就是我们可以使用引用引用。...引用引用的定义 引用(SoftReference): 如果一个对象只具有引用,而当前虚拟机堆内存空间足够时,那么垃圾回收器就不会回收它,反之就会回收当前引用指向的对象。...下面通过一段简单的代码来看一下引用引用的具体用法; import java.lang.ref.SoftReference; import java.lang.ref.WeakReference;...System.out.println(weakRef.get()); } } 通过上面这个例子,我们来分析一下引用引用的差别,首先看引用的例子,我们先定义了一个强引用对象...相比之下,我们不用引用而选择用强引用,那么我们就在用户被删除之后,需要手动删除用户优惠券之间的对应关系,如果忘了删除就会出现代码问题,相比之下,当我们引用引用时,就会给我们带来“自动更新”这样的好处

    1.1K30

    Java引用类型:强引用引用引用,虚引用

    在Java中提供了4个级别的引用:强引用引用引用,虚引用。在这4个引用级别中,只有强引用FinalReference类是包内可见,其他3中引用类型均为public,可以在应用程序中直接使用。...所以还是建议使用引用 当然了,上面的例子是OOM之前回收引用。怎么才能full gc就回收引用对象呢?...引用 引用时一种比引用较弱的引用类型。...一旦一个引用对象被垃圾收集器回收,便会加入导一个注册引用队列中 虚引用引用时所有引用类型中最弱的一个,一个持有引用的对象,没有引用几乎是一样的,随时都可能被垃圾回收器回收。...当试图通过虚引用的get()方法取得强引用时,总会失败。并且,虚引用必须引用队列一起使用,它的作用在于跟踪垃圾回收过程。

    2.2K31

    Java 的强引用引用引用、虚引用

    Java四种引用包括强引用引用引用,虚引用。...、引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。...从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用引用引用引用。...引用可以一个引用队列(ReferenceQueue)联合使用,如果引用引用的对象被垃圾回收,Java虚拟机就会把这个引用加入到与之关联的引用队列中。...虚引用引用引用的一个区别在于:虚引用必须引用队列 (ReferenceQueue)联合使用。

    1.6K10

    引用引用引用、虚引用的对比

    引用引用引用、虚引用 从Jdk1.2开始,在java.lang.ref包下就提供了三个类:SoftReference(引用),PhantomReference(虚引用WeakReference...(引用),它们分别代表了系统对对象的中的三种引用方式:引用,虚引用以及引用。...PhantomReference refernce = new PhantomReference(object); object = null; 1 强引用引用的区别 引用只有在内存不足的时候才会被清理...2 引用引用的区别 引用不会影响GC的清理,也就是说当GC检测到一个对象存在引用也会直接标记为可清理对象,而引用只有在内存告罄的时候才会被清理 3 引用引用的区别 说两者的区别之前要说一下...虚引用必须一个ReferenceQueue联合使用,当GC准备回收一个对象的时候,如果发现该对象还有一个虚引用,就会将这个虚引用加入到与之关联的队列 引用是当GC第一次试图回收该引用指向的对象时会执行该对象的

    2.2K20

    Java的强引用引用引用、虚引用

    它底层实现API接口上使用了强引用引用引用。所以温故知新下,也夯实下基础。...因为引用通常情况下就是这样,只有内存马上要溢出了才触发它的GC。就好像扁鹊见蔡桓公的时候,蔡桓公的病已经很深了,马上就没救了。所以有了下面引用的方法:有病早治。...引用 引用是发生了一次垃圾回收后,既存的引用对象就开始回收。通常,一个引用对象仅能生存到下一次垃圾回收前。 用实验说明一下,为了防止JVM自动调整堆大小,我们把堆设置-Xmx200M。...当显示设置为引用或者引用时,运行时GC触发对象回收之间的关系自己手动直接测试的结果是一样的,大家可以动手实践下。...总结 Java的强软弱虚引用被回收的时机不同:强引用引用被释放才会回收;引用是没释放,但是快OOM了就会被回收;引用引用没释放,但是发生了GC后就会被回收;虚引用随时会回收,好像没有存在过,但是会有一个队列来跟踪它的垃圾回收情况

    2.1K31

    什么是强引用引用引用、虚引用

    什么是强引用引用引用、虚引用? 强引用(StrongReference):一般指的是对像被new出来,强引用一般不会被jvm收回,但会报OutOfMemory(内存不足)。...Object obj = new Object(); 引用(SoftReference):引用相对来说于强引用,当内存足够的时候不会被GC回收,但内存不足时,再试图回收引用,通过引用可以做临时缓存...SoftReference ref = new SoftReference("hong"); 引用(WeakReference):区别于软件引用是生命周期更短,当GC回收启动发现引用不管内存满不满...4种引用强度从高到低:强引用 -> 引用 -> 引用 -> 虚引用 最后 不管哪种引用,在开发过程中,都是尽量减少强引用,毕竟内存有限,虽然说放到内存可以提升用户访问效率,但是这也是一把双刃剑,...有利上定有弊,过于依赖内存,就会导致不足溢出后面就jj了...

    1.7K10

    Java 的强引用引用引用、虚引用

    引用可以一个引用队列(ReferenceQueue)联合使用,如果引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个引用加入到与之关联的引用队列中。...3、引用(WeakReference)       引用引用的区别在于:只具有引用的对象拥有更短暂的生命周期。...下面的代码会让str再次变为一个强引用:     String abc = abcWeakRef.get();     引用可以一个引用队列(ReferenceQueue)联合使用,如果引用引用的对象被垃圾回收...虚引用引用引用的一个区别在于:虚引用必须引用队列 (ReferenceQueue)联合使用。...5、总结     Java4种引用的级别由高到低依次为: 强引用  >  引用  >  引用  >  虚引用     通过图来看一下他们之间在垃圾回收时的区别: ?

    3.6K30

    【小家java】引用类型(强引用引用引用、虚引用

    1、概述 本文不论述java中值传递引用传递之间的问题(有需求的可移步理解java中值传递引用传递),而重点讨论Java中提供了4个级别的引用:强应用、引用引用引用。...引用可以一个引用队列(ReferenceQueue)联合使用,如果引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个引用加入到与之关联的引用队列中。...方法 } } 从上可以看出,咱们就可以监听回收,然后doSomething了 引用(WeakReference):引用引用很像,当gc时,无论内存是否充足,都会回收被引用关联的对象。...如果引用引用的对象被JVM回收,这个引用就会被加入到与之关联的引用队列中 虚引用(关注使用场景) 虚引用(PhantomReference):虚引用前面的引用引用不同,它并不影响对象的生命周期...因此它必须ReferenceQueue一起使用,否则没有任何意义 3、使用场景 使用引用构建敏感数据的缓存(如用户的基本信息) 使用引用构建非敏感数据的缓存,如WeakHashMap 当一个键对象被垃圾回收器回收时

    2.1K40

    Java基础 之引用引用、虚引用

    从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用引用引用引用。...引用可以一个引用队列(ReferenceQueue)联 合使用,如果引用引用的对象被垃圾回收,Java虚拟机就会把这个引用加入到与之关联的引用队列中 4、引用(WeakReference)   ...虚引用引用引用的一个区别在于:虚引用必须引用队列 (ReferenceQueue)联合使用。...6、相关应用   在java.lang.ref包中提供了三个类:SoftReference类、WeakReference类PhantomReference类,它 们分别代表引用引用引用。...    在以下代码References类中,依次创建了10个引用、10个引用10个虚引用,它们各自引用一个Grocery对象。

    94940

    Java 的四种引用:强引用引用引用引用

    在 Java 中,引用是一种指向对象的引用类型。不同类型的引用在垃圾回收机制中的行为各不相同,影响对象的生命周期内存管理。以下是 Java 中的四种引用类型:强引用引用引用引用。 1....引用(Weak Reference) 引用是通过 WeakReference 类实现的。引用的对象在垃圾回收时,如果内存需要,垃圾回收器会回收这些对象。...即使存在引用,只要没有强引用,垃圾回收器就会回收该对象。...强引用是最常见的引用方式,引用引用则为对象提供了更灵活的回收策略,适用于不同的内存管理需求。虚引用虽然无法直接访问对象,但为垃圾回收提供了监控手段。...根据具体需求选择合适的引用类型,可以有效提高应用的性能内存利用率。

    9910

    【JVM】如何理解强引用引用引用、虚引用

    sr = new SoftReference(prev); // 重新构建 } 引用可以一个引用队列(ReferenceQueue)联合使用,如果引用引用的对象被垃圾回收器回收...引用引用的区别在于:只具有引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有引用的对象,不管当前内存空间足够与否,都会回收它的内存。...引用可以一个引用队列(ReferenceQueue)联合使用,如果引用引用的对象被垃圾回收,Java虚拟机就会把这个引用加入到与之关联的引用队列中。 为什么引入?...虚引用引用引用的一个区别在于:虚引用必须引用队列 (ReferenceQueue)联合使用。...总结 java4种引用的级别由高到低依次为: 强引用 > 引用 > 引用 > 虚引用 下面通过表格总结一下: 引用类型被垃圾回收时间用途生存时间强引用从来不会对象的一般状态JVM停止运行时终止引用在内存不足时对象缓存内存不足时终止引用在垃圾回收时对象缓存

    1.2K10

    引用引用引用引用解析应用场景分析

    引用整体架构图 java.lang.ref下引用架构 引用引用(默认支持类型) 引用 引用引用引用(默认支持模式) 我们平常普通写的 Object a=new object(); 创建对象就是一种强引用...引用 引用需要用java.lang.ref.WeakReference类来实现,它比引用的生存期更短 对于只有引用的对象来说,只要垃圾回收机制一运行,不管JVM的内存空间是否足够,都会回收该对象占用的内存...引用demo 引用/引用应用场景 场景模拟: 假如有一个应用需要读取大量的本地图片: 如果每次读取图片都从硬盘读取则会严重影响性能,如果一次性全部加载到内存中又可能造成内存溢出。...引用,引用,虚引用在创建时候可以直接传一个对象其实他们还有另外有一个构造方法是传一个对象一个引用队列,这样会使他们回收之前保存到Reference里....当关联的引用队列中有数据的时候,意味着引用指向的维内存中的对象被回收。通过这种方式,JVM允许我们在对象被销践后,做一些我们自己想做的事情。 四大引用GCroot的杂糅

    65130

    Java中引用引用、虚引用、强引用、 Finalizer引用

    在Java层面,一共有四种引用:强引用引用引用、虚引用,这几种引用的生命周期由强到。转换关系大致如下图所示: ?...只有当JVM认为内存不足时,才会试图回收引用指向的对象,JVM会确保在抛出OutOfMemoryError之前,清理引用指向的对象。...,在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有引用的对象,不管当前内存空间足够与否,都会回收它的内存 System.gc(); // 引用的对象在内存充足的情况下不会回收...引用何时被加到ReferenceQueue队列里   在构造引用引用幻象引用的时候,可以传入一个ReferenceQueue的对象,这个队列是用来做什么的呢?...当引用引用幻象引用引用的对象被回收之后,对应的SoftReference,WeakReference,PhantomReference 对象已经不再具有存在的价值,需要一个适当的清除机制,避免大量

    2.1K30

    Android性能优化篇:使用引用引用

    Android性能优化篇:使用引用引用 Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。...这四种级别由高到低依次为:强引用引用引用引用。 这里重点介绍一下引用引用。...在java.lang.ref包中提供了几个类:SoftReference类、WeakReference类PhantomReference类,它们分别代表引用引用引用。...在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用引用引用技术。 下面以使用引用为例来详细说明。引用的使用方式与引用是类似的。...如果该对象可能会经常使用的,就尽量用引用。如果该对象不被使用的可能性更大些,就可以用引用。 另外,引用功能类似的是WeakHashMap。

    1K60

    Android开发优化之——使用引用引用

    Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用引用引用引用。...这里重点介绍一下引用引用。 如果一个对象只具有引用,那么如果内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。...在java.lang.ref包中提供了几个类:SoftReference类、WeakReference类PhantomReference类,它们分别代表引用引用引用。...在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用引用引用技术。 下面以使用引用为例来详细说明。...如果该对象可能会经常使用的,就尽量用引用。如果该对象不被使用的可能性更大些,就可以用引用。 另外,引用功能类似的是WeakHashMap。

    67790

    【JVM】深入理解Java引用类型:强引用引用引用引用

    导言: 在Java中,引用类型是内存管理的重要组成部分。本文将深入介绍强引用引用引用引用,为您解析它们的特性以及如何在实际应用中巧妙利用。 1....引用(Soft Reference): 定义: 引用用于描述一些还有用但并非必须的对象,在内存不足时可能被垃圾回收。...; } } } 在这个例子中,创建了一个10MB大小的大对象,并使用引用SoftReference与之关联。然后,尝试通过引用获取对象。...引用(Weak Reference): 定义: 引用(Weak Reference)是Java中一种比强引用更弱的引用类型。当一个对象只被引用关联时,在下一次垃圾回收时,该对象就有可能被回收。...解除对对象的强引用后,手动触发垃圾回收。由于只有引用关联该对象,垃圾回收器可能会在垃圾回收时回收这个对象。因此,通过引用可以更容易地允许对象在合适的时候被回收。 4.

    64310

    Java finalize函数与引用引用、虚引用

    二、引用引用、虚引用         这里不会具体介绍这三种引用的含义,有需要的可自行百度。这里重点介绍下设计这三种引用的不同目的。          ...引用引用也是用来描述非必需对象的,但它的强度比引用更弱,被引用关联的对象只能生存到下一次垃圾收集发生之前。...引用队列:在创建对象的引用引用或虚引用的时候,可以将引用对象一个引用队列关联起来,当垃圾收集器决定对这些对象进行垃圾回收的时候,就会将引用对象添加到所关联的引用队列。...由于虚引用的唯一目的就是能在这个对象被垃圾收集器回收后能收到系统通知,因而创建虚引用时必须要关联一个引用队列,而引用引用则不是必须的。...这里还需要强调的是,对于引用引用,当执行第一次垃圾回收时,就会将引用引用对象添加到其关联的引用队列中,然后其finalize函数才会被执行(如果没覆写则不会被执行);而对于虚引用,如果被引用对象没有覆写

    79220
    领券