java对象的四种引用方式
对象的引用方式分:强、软、弱、虚四种
强引用
普通的写法即强引用
Object obj = new Object()
当GC回收时,拥有强引用的对象不会不清楚,及时内存不足,出现OOM事件,也不会清除
软引用
SoftReference aSoftRef = new SoftReference(new Object()); // aSoftRef句柄对对象的引用即为软引用
GC回收时,弱引用对象也不会被回收,但当内存不足时,弱引用对象就会被回收掉,可以通过get获取:aSoftRef.get()
,适合当做缓存使用(极端情况被清理掉也无所谓)
弱引用
WeakReference<Object>reference=new WeakReference<Object>(new Object());
弱引用的特点,只要经历一次GC就会被直接回收掉,可以通过get获取:reference.get()
虚引用
最弱的引用,甚至连get都get不到,但虚引用指向的对象在被GC回收时会收到系统通知,它的实际用处是JVM用来清理堆外内存使用的(堆外内存不归GC管,但JVM需要通过软引用在堆内存被GC时接受通知)
ThreadLocal使用弱引用
ThreadLocal
测试代码
public static ThreadLocal<String> name = new ThreadLocal<&