四种引用类型
1. 概念
"万事万物皆对象"是Java语音设置之处的理念之一。《Java编程思想》中写到:“按照通俗的说法,每个对象都是某个类(class)的实例(instance),这里,“类”就是“类型”的同义词”。同时对象调方法。
“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操作数据,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在Java里面都得到了简化,一切都被视为对象。因此,我们可以采用一种统一的语法。尽管将一切都“看作”对象,但是操纵的标识符实际是指向一个对象的“引用”(reference)”.
2. 引用的类型
在JDK1.2之后,Java对于引用的感念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)四种引用类型。这四种引用类型的引用强度依次逐渐递减。
四种引用类型的基本逻辑
3. 各自概念与用法
强引用:
强引用在代码中普遍的存在,类似与“Object obj = new Object();”只要某个对象有强引用与之关联,JVM则无法回收该对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误,也不会回收这种对象。
软引用:
软引用常常用来描述一些有用但是非必需的对象。对于软引用关联的对象,会在JVM内存不足时既OutOfMemory之前将这些对象列入回收范围,进行二次回收。如果这时回收还是没有足够的内存才会造成内存溢出异常。在JDK1.2之后,提供了SoftReference类来实现软引用。软引用一般用于网页的缓存图片的缓存等等比较耗时的操作,但是这些操作目前一般使用LruChche来实现,因此目前代码中很少见到SoftReference。
弱引用:
弱引用也是用来描述非必要对象的,但是它的轻度比软引用要弱一些,被弱引用关联的对象只能生存到下一次垃圾收集器回收之前,当JVM进行gc操作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK1.2以后,提供了WeakReference类来实现弱引用。弱引用的使用范围也很小,Android 中最常见的是WeakHandler
虚引用
虚引用也称之为幽灵引用,或者幻影引用,它是最弱的一种引用关系,一个对象是否有虚引用的存在,完全不会对其生存时间构成影响。也无法通过虚引用来取得一个对象的实例,为一个对象设置为虚引用的唯一目的是希望这个对象被回收器回收时梦收到一个系统通知,在JDK1.2之后,提供了PhantomReference类来实现虚引用。没有遇到过