美文网首页
强软弱虚引用

强软弱虚引用

作者: 小小卒_oO_ | 来源:发表于2019-04-01 17:16 被阅读0次

一、强引用(StrongReference)

不会回收有强引用的对象。

String str ="hello";//普通声明就是强引用
str = null;//赋值为null,JVM在合适的时间就会回收该对象

除了强引用,其他的引用都需要借助java.lang.ref包下的抽象类 Reference 的子类来进行包装操作了!在java.lang.ref包下,Reference类有3个具体的实现类,SoftReferenceWeakReferencePhantomReference,分别表示软引用、弱引用和虚引用!

二、软引用(SoftReference)

如果内存空间足够,就不会回收它;如果内存空间不足,就会回收。

String str=new String("abc");                                     // 强引用
SoftReference<String> soft = new SoftReference<String>(str);     // 软引用
//软引用包含的对象可以通过get()获取到
soft.get();
-------
//提醒系统进行一个垃圾收集
System.gc();
System.out.println(soft.get() == null);//打印false,说明软引用中的对象并没有被回收!

三、弱引用(WeakReference)

不管当前内存空间足够与否,都会回收。

// 创建一个引用队列
ReferenceQueue<String> rq = new ReferenceQueue<String>();
// 实现一个弱引用,将强引用类型hello和是实例化的rq放到弱引用实现里面
WeakReference<String> weak = new WeakReference<String>(new String("hello"), rq);
// 通过弱引用get方法获取强引用中创建的内存空间hello值
System.out.println(weak.get());
System.gc();                //通知JVM的gc进行垃圾回收
System.out.println(weak.get() == null);//打印true,说明弱引用中的对象被回收了!
-----------
//创建一个弱引用,包含一个对象
WeakReference<Integer> weak = new WeakReference<>(new Integer("23456"));
//弱引用包含的对象可以通过get()获取到
Integer weakNum = weak.get();

四、虚引用(PhantomReference)

和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

//创建一个虚引用,包含一个对象
ReferenceQueue<Integer> intRq = new ReferenceQueue<>();
PhantomReference<Integer> phantom = new PhantomReference<>(new Integer("23456"),intRq);
//引用包含的对象可以通过get()获取到
Integer phantomNum = phantom.get();
  • 无法通过虚引用来获取对一个对象的真实引用。
  • 虚引用必须和引用队列 (ReferenceQueue)联合使用。
  • 唯一的用处:能在对象被GC时收到系统通知。
  • 如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

相关文章

  • 强软弱虚引用

    四种引用的区别: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它。软引用:如果一个对象只具有软引用,则内...

  • 强软弱虚引用

    一、强引用(StrongReference) 不会回收有强引用的对象。 除了强引用,其他的引用都需要借助java....

  • 强软弱虚引用

    强引用 简介: 强引用 (Strong Reference) 特征: 只有手动赋值为 null 才会被垃圾回收线程...

  • Java强软弱虚引用

    在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及...

  • 高并发编程之ThreadLocal

    强软弱虚 ThreadLocal 为什么Entry 的key 使用的是弱引用?

  • Android面试题大全-Java基础篇

    Java基础 内存泄漏的场景 强软弱虚引用分别什么区别 什么场景下使用虚引用 ClassLoader的双亲委派原理...

  • 强软弱虚引用如何理解

    强引用:我们平时最常使用的基本对象引用,JVM不会回收强引用类型对象,即使内存不足导致OOM也不会回收。 实现一个...

  • Java中的四种引用

    1.强软弱虚四种引用 1.1 强引用 执行结果: 解释:强引用是JVM的默认实现,即使内存不足会导致OOM(Out...

  • Java 引用 强软弱虚 和LruCache

    1.强引用 我们一般 XX a = new XX()就是 强引用,不会被回收,当内存不足时 报出out of me...

  • 强软弱虚引用以及threadlocal

    https://blog.csdn.net/qq1805696978/article/details/104106517

网友评论

      本文标题:强软弱虚引用

      本文链接:https://www.haomeiwen.com/subject/aoivbqtx.html