引用,用于操作对象
User user = new User();//强引用
//此时,user就是引用
User u1 = user;
//此时,user持有可以操作的对象User,同时也被u1持有,user、u1同时关联一个对象
一个对象可以被多个引用持有,且可以是被不同的引用持有
Android有四种引用
1.强引用(StrongReference)
2.软引用(SoftReference)
3.弱引用(WeakReference)
4.虚引用(PhantomReference)
Object ob = new Object();
SoftReference<Object> sOb= new SoftReference<Object>(ob);//适用缓存应用
WeakReference<Object> wOb= new WeakReference<Object>(ob);
ReferenceQueue rq= new ReferenceQueue<String>();
PhantomReference<String> p = new PhantomReference<String>("abc",rq);
ob = null;
System.gc();
1.强引用:
使用最多的一种引用,如:创建一个成员变量、new出一个对象...
强引用可以直接访问目标对象,强引用所关联的对象,在任何时候都不会被内存回收,JVM宁可抛出OOM(out of memory)异常,也不会对强引用进行回收,所以在通常的内存泄漏中,很多都是强引用的原因
2.软引用:
软引用是出了强引用之后最强的引用,不同在于软引用可以被内存回收的
回收机制:当内存充足时,在GC时不会去回收当前的软引用,当内存临近阈值或者不足时,在GC的时候发现某一对象只具有软引用时,当前引用会被回收
当一个对象具有软引用又具有强引用时,是不会被回收的。只会收回只具有软引用的对象
3.弱引用:
弱引用是比软引用、强引用更弱的引用,GC时无论内存是否充足,发现某一处对象只具有弱引用时,当前引用就会被回收。
4.虚引用:
虚引用不能保证其保存对象的生命周期,若被保存的对象只有虚引用,则有效期完全随机与GC的回收,在任何一个不确定的时间内都可能被回收。
虚引用不同于其他引用在于,使用PhantomRefrence时必须要和ReferenceQueue联合使用