引用,用于操作對象
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聯合使用