不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。
强引用:
强引用类就是指在代码中普遍存在的,类似于Object object = new Object();只要强引用还在,垃圾回收器就永远不会回收被引用的对象,即使发生OOM,如果没有其他引用关系,只要超过了引用的作用于或者显式的将相应引用赋值为null,就可以被垃圾回收器回收掉。
软引用:
软引用是用来描述一些还有用但是非必须的对象。软引用可以让对象豁免一些垃圾回收,只有当JVM内存不足时,才会回收掉软引用指向的对象,JVM会确保抛出OOM之前回收掉软引用指向的对象,如果这次回收后还是没有足够的内存,JVM将会抛出OOM。软引用通常来实现内存敏感的缓存数据,如果还有空闲内存,就可以暂时保留缓存,如果内存不足时,清理掉缓存,这样就 保证了使用缓存的同时不会耗尽内存。使用SoftReference类来实现软引用。
弱引用:
弱引用也是用来描述非必须对象的,但是强度比软引用更弱一些。被软引用关联的对象只能活到下次垃圾收集前。无论当前内存是否充足,都会回收掉弱引用关联的对象。使用WeakReference类来实现弱引用。
虚引用:
虚引用是一种最弱的引用关系,一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例(获取到的是null)。虚引用的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。有人利用幻象引用监控对象的创建和销毁。提供了PhantomReference类来实现虚引用