概述
在Java 1.2版本后,将引用概念进行扩充,分别为:强引用、软引用、弱引用、虚引用,引用强度由强到弱。
一、强引用
在程序中最常用的引用方式,如:Object obj = new Object()这种引用关联,强引用只要引用关系存在,GC在回收时就不会回收引用的对象。
二、软引用
软引用是描述一些对象有用,但是,是非必须的对象。软引用引用的对象,在系统内存溢出前,GC进行第二次回收,当回收内存不足够使用,才会抛出内存溢出异常。
在Java 1.2版本后,软引用通过SoftReference类实现。
三、弱引用
弱引用比软引用强度更弱一点,描述一些非必须的对象,弱引用对象的生命周期在下一次的GC为止。弱引用对象无论无论系统内存是否充足,在GC时都会被回收。
在Java 1.2版本后,弱引用通过WeakReference类实现。
四、虚引用
虚引用是引用强度最弱的,虚引用的对象对对象的生命周期没有任何影响,并且也无法通过虚引用获取对象。虚引用存在的唯一目的就是为了在GC回收前对象能收到系统回收的通知。
在Java 1.2版本后,虚引用通过PhantomReference类实现。