Java四种引用类型,按照引用类型的强弱顺序分别是

  1. 强引用
  2. 软引用
  3. 弱引用
  4. 虚引用

背景:我们希望有这样一种场景像缓存一样,

即:在内存还足够时,希望能够保留这些对象,当内存不够时,则删除这些对象(当然是由垃圾回收完成)。

强引用:

即我们日常的操作,像:Object obj=new Object(); 有一个引用指向这个对象。
只要强引用还存在就不会被垃圾回收线程回收了。

软引用:

即那些不是必需的对象,进行垃圾回收时,如果内存够,被垃圾回收程序标记,并在第二次垃圾回收时进行回收,
如果内存不够就会被垃圾回收器直接回收掉,如果还是不够内存则抛出内存溢出异常。

         关键类:SoftReference;

弱引用:

即无论内存是否足够只要垃圾回收器触发,就会把弱引用引用的对象当作垃圾回收掉。

        关键类:WeakReference

虚引用:

一个对象是否有虚引用存在,完全不会对对象的生存时间构成影响,也无法通过虚引用获得一个对象实例,
 为一个对象设置虚引用的唯一目的就是在这个对象被收集器回收时返回一个系统通知。
 虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,
 如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

        关键类:Phantom Reference

总结

引用类型

垃圾回收时间

用途

生存时间

强引用

强引用还在就会一直存在

对象的常规状态

JVM停止运行

软引用

内存不足时

缓存

内存不足时

弱引用

正常垃圾回收

缓存

垃圾回收发生时

虚引用

正常垃圾回收

跟踪垃圾回收

垃圾回收发生时