Java四种引用类型概述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qunqunstyle99/article/details/100662037

Java中具有四种引用类型,按引用强度由大到小排列分别是:

  • 强引用
  • 软引用
  • 弱引用
  • 虚引用

Java中垃圾回收机制在判断是否回收某个对象时,都需要依据“引用”的概念。Java中采用可达性分析的确认是否回收的算法,从一个被称为 GC Roots 的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明此对象不可用。在这之间对于四种引用会对应着不同的声明周期,在不同的时期被回收。

强引用

只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。

软引用

软引用是用来描述一些非必需但仍有用的对象在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等。
在 JDK1.2 之后,用 java.lang.ref.SoftReference类 来表示软引用。

弱引用

弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。在 JDK1.2 之后,用 java.lang.ref.WeakReference类 来表示弱引用。

虚引用

虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。

为一个对象设置成虚引用的唯一作用就是 在对象被回收的时候返回一个系统通知。


这篇博客写的很好,还有很多的例子:
https://www.cnblogs.com/liyutian/p/9690974.html

猜你喜欢

转载自blog.csdn.net/qunqunstyle99/article/details/100662037