引用甘桑,用于操作對象
User user = new User();//強引用
//此時,user就是引用
User u1 = user;
//此時歹叮,user持有可以操作的對象User跑杭,同時也被u1持有,user咆耿、u1同時關聯(lián)一個對象
一個對象可以被多個引用持有德谅,且可以是被不同的引用持有
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.強引用:
使用最多的一種引用,如:創(chuàng)建一個成員變量萨螺、new出一個對象...
強引用可以直接訪問目標對象窄做,強引用所關聯(lián)的對象,在任何時候都不會被內(nèi)存回收慰技,JVM寧可拋出OOM(out of memory)異常,也不會對強引用進行回收椭盏,所以在通常的內(nèi)存泄漏中,很多都是強引用的原因
2.軟引用:
軟引用是出了強引用之后最強的引用吻商,不同在于軟引用可以被內(nèi)存回收的
回收機制:當內(nèi)存充足時掏颊,在GC時不會去回收當前的軟引用,當內(nèi)存臨近閾值或者不足時手报,在GC的時候發(fā)現(xiàn)某一對象只具有軟引用時蚯舱,當前引用會被回收
當一個對象具有軟引用又具有強引用時改化,是不會被回收的掩蛤。只會收回只具有軟引用的對象
3.弱引用:
弱引用是比軟引用、強引用更弱的引用陈肛,GC時無論內(nèi)存是否充足揍鸟,發(fā)現(xiàn)某一處對象只具有弱引用時,當前引用就會被回收句旱。
4.虛引用:
虛引用不能保證其保存對象的生命周期阳藻,若被保存的對象只有虛引用,則有效期完全隨機與GC的回收谈撒,在任何一個不確定的時間內(nèi)都可能被回收腥泥。
虛引用不同于其他引用在于,使用PhantomRefrence時必須要和ReferenceQueue聯(lián)合使用