首先"引用"(Reference)通常指的是一种数据类型或者数据结构中的元素,它提供了对另一个变量或对象的间接访问。
在
JDK 1.2
版之后,
Java
对引⽤的概念进⾏了扩充,将引⽤分为
强引⽤
(Strongly Re-
ference)
、
软引⽤
(Soft Reference)
、
弱引⽤
(Weak Reference)
和
虚引⽤
(Phantom
Reference)
4
种,这
4
种引⽤强度依次逐渐减弱。
·
强引⽤是最传统的
“
引⽤
”
的定义,是指在程序代码之中普遍存在的引⽤赋值,即类似
“
Object obj=new Object()
”
这种引⽤关系。⽆论任何情况下,
只要强引⽤关系还存在,
垃圾收集器就永远不会回收掉被引⽤的对象
。
·
软引⽤是⽤来描述⼀些还
有⽤,但⾮必须的对象
。只被软引⽤关联着的对象,在系统将
要发⽣内存溢出异常前,会把这些对象列进回收范围之中进⾏
第⼆次回收
,如果这次回收
还没有⾜够的内存,才会抛出内存溢出异常。在
JDK 1.2
版之后提供了
SoftReference
类
来实现软引⽤。
·
弱引⽤也是⽤来描述那些
⾮必须对象
,但是它的强度⽐软引⽤更弱⼀些,被弱引⽤关联
的对象
只能⽣存到下⼀次垃圾收集发⽣为⽌
。当垃圾收集器开始⼯作,
⽆论当前内存是否
⾜够,都会回收掉只被弱引⽤关联的对象
。在
JDK 1.2
版之后提供了
WeakReference
类来
实现弱引⽤。
·
虚引⽤也称为
“
幽灵引⽤
”
或者
“
幻影引⽤
”
,它是最弱的⼀种引⽤关系。⼀个对象是否有虚
引⽤的存在,完全不会对其⽣存时间构成影响,也⽆法通过虚引⽤来取得⼀个对象实例。
为⼀个对象设置虚引⽤关联的唯⼀⽬的只是为了能在这个对象被收集器回收时
收到⼀个系
统通知
。在
JDK 1.2
版之后提供了
PhantomReference
类来实现虚引⽤。