Java引用类型分类以及详解
– Java引用类型概述
- 强引用
强引用是Java默认支持的一种操作模式,也就是说在引用的处理其间,即使出现有GC,即使内存不足,该引用的数据也不会被回收。
范例:观察强引用:
这个流程就叫做强引用。在之前所编写的所有操作都属于强引用,而强引用只有全部的对象都断开连接之后,才可能称为垃圾空间,才有可能被回收。而即使有一个对象引用此空间,那么该对象也不会被回收。
在多线程状态下,即使产生多个引用对象,空间也不会被回收。
每个线程都会出现OOM
强引用并不是造成OOM的关键性因素,正常来讲,你每一个用户(线程)操作完成后,该对象都可以被很容易的进行回收,不必强制性进行回收。
- 软引用
软引用指的是当内存不足的时候才进行GC的空间释放,但是如果要想使用软引用必须单独使用特殊的处理类:
java.lang.ref.SoftReference,该类的定义如下:
除了强引用,其它引用必须借助特殊类来完成。
软引用的类继承了Reference的引用父类。
这个类下有三个引用:

在软引用之中如果想要进行引用的处理操作,则可以使用如下的方法完成:
- 弱引用
弱引用最大的特点就是一旦发生了GC的处理操作,则保存的引用内容将立即释放。弱引用使用“WeakReference”类来完成。
java.lang.ref.WeakReference


- 引用队列
在之前使用软引用和弱引用的时候都会发现有这样一个构造方法:
SoftReference:
WeakReference:
java.lang.ref包中一共五各类:一个父类,三个子类,另外一个就是引用队列。
通过以上的图形分析可以发现,如果要想找到“对象5”,那么一共有两条对象的可及性的路径:

引用队列里面保存的就是一个要准备被回收的对象的信息。
- 幽灵引用(虚引用)
幽灵引用指的是什么都不保存,但是又看起来像是保存了一样。
这个的处理类java.lang.ref.PhantomReference。
需要发生引用但是又不需要引用占用空间的时候。—采用幽灵引用。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178932.html原文链接:https://javaforall.net
