1.強引用
我們實例化一個對象,直接引用了這個對象就是強引用。在這個對象被強引用的時,GC無法回收這個對象。
只有當該對象所有的強引用都失去的時候,GC才會回收該對象。
2.弱引用
弱引用可以讓您保持對對象的引用,同時允許GC在必要時釋放對象,回收內存。
一般使用場景:對象過大,並且不經常訪問。這樣我們就可以創建一個弱引用,當不常用該對象的時候,GC可以回收該對象,當需要引用對象,可以先判斷弱引用的對象是不是存在,如果存在,就直接使用,如果弱引用的對象已經被回收,那就重新創建一個對象來使用。
3.WeakReference
C#中采用WeakReference來創建弱引用。直接演示一個代碼:
Person person = new Person() { Id = 1, Name = "demo" };
//實例化弱引用傳遞一個對象
WeakReference wk = new WeakReference(person);
Person p1;
if (wk.IsAlive) //如果person沒有被回收
{
p1 = wk.Target as Person; //直接引用原對象
}
else //如果person已經被回收了 重新創建一個對象
{
p1 = new Person() { Id = 1, Name = "demo" };
}
4.總結
弱引用運行創建和使用對象,但是垃圾回收器運行時,就會回收對象釋放內存。但始終存在這樣的風險:垃圾回收器在重新建立強引用之前先處理該對象。但是在特定的情況下使用弱引用是很合理的。
使用 WeakReference類創建弱引用。因為對象可能在任意時刻被回收,所以在引用前必須確認它存在。