Java四种引用的使用场景(强软弱虚)
一、引用强度排序
强引用>软引用>弱引用>虚引用
二、强引用:正常创建的对象,只要引用存在,永远不会被GC回收,即使OOM
Object obj = new Object();
三、软引用,内存溢出之前进行回收,GC时如果内存足够,就不回收。使用场景:在内存足够的情况下进行缓存,提升速度
Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null;
sf.get();//有时候会返回null
四、弱引用:每次GC时回收,无论内存是否足够。使用场景:1. ThreadLocalMap防止内存泄漏 2. 监控对象是否将要被回收
Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
obj = null;
wf.get();//有时候会返回null
wf.isEnQueued();//返回是否被垃圾回收器标记为即将回收的垃圾
五、虚引用,每次垃圾回收时都会被回收,主要用于监测对象是否已经从内存中删除
Object obj = new Object();
PhantomReference<Object> pf = new PhantomReference<Object>(obj);
obj=null;
pf.get();//永远返回null
pf.isEnQueued();//返回是否从内存中已经删除
参考:
https://www.cnblogs.com/yw-ah/p/5830458.html
原文:https://www.cnblogs.com/june0816/p/10029286.html