Java中强引用、软引用、弱引用、虚引用,引用强度从大到小依次是强软弱虚。
强引用
强引用是引用关系最强的一种引用,比如
User user = new User();
这种就是强引用。user和堆对象强关联,通常不会被GC回收(除非满足根不可达或者使用“User user = null” 解绑)。
使用场景:一般用于常规业务编码。
软引用
软应用(SoftReference)比强引用的引用强度低一点,当OOM内存溢出时,被回收。软引用可以和一个引用队列ReferenceQueue联合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
使用场景:一般用于缓存,利用OOM时回收的特性设置缓存的场景。
弱引用
弱引用(WeakReference) 比软引用的引用强度低一点,在每次GC时,被回收。一般用于缓存,利用每次GC时回收的特性设置缓存的场景,比如ThreadLocal。
虚引用
虚引用(PhantomReference) 是最弱的一种引用,严格说没有引用。
使用场景:一般用于系统监控,监控GC什么时间进行了垃圾回收。