java四种引用包括 强引用、软引用、弱引用、虚引用
强引用
只要引用存在,就不会被回收
Object obj=new Object();
想要gc回收这个对象,就需要显式的将object = null ,那么对象就不存在引用关系
软引用
非必须引用,内存溢出之前进行回收,
Object obj=new Object();
SoftReference sf=new SoftReference(obj);
obj=null;
sf.get();// 有时候会返回null
这时候sf是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当这个对象被标记位为需要回收的对象时,返回null,
软引用主要是为了用户实现类似缓存的功能,内存足够时直接通过软引用取值,内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。
Android很多图片框架使用软引用来缓存bitmap,避免app的内存不足
弱引用
Object obj=new Object();
WeakReferencewf=new WeakReference(obj);
obj=null;
wf.get();//有时会返回null
wf.isEnQueued();//返回是否被垃圾回收器标记为即将回收的垃圾
弱引用是在第二次垃圾回收时回收,短时间内通过弱引用取对应的数据,可以取到。当执行过第二次垃圾回收时,返回null
虚引用
垃圾回收时回收,无法通过引用取到对象值,可以通过如下代码实现
Object obj=new Object();
PhantomReference