如果我創建一個類的對象空對象是什麼意思?
A obj = new A();
,後來我給你null
它:obj = null;
。
那麼它是什麼意思obj爲null?這是否意味着現在它指向無處,所有的內存都被釋放了?
如果我創建一個類的對象空對象是什麼意思?
A obj = new A();
,後來我給你null
它:obj = null;
。
那麼它是什麼意思obj爲null?這是否意味着現在它指向無處,所有的內存都被釋放了?
這意味着它指向無處,內存有資格在未來某個未定義的時間由垃圾收集器重新分配。
如果/當存儲在'obj'中的實例不存在其他引用時。 – 2013-03-24 11:55:51
絕對....並假設沒有GC.Collect()或Dispose()或其他... – 2013-03-24 11:57:53
...並保存垃圾收集器*一些*努力,你應該調用'obj.Dispose();'在設置'obj = null;'之前,明確告訴垃圾收集器它可以收集該內存。 – Sebivor 2013-03-24 11:57:59
obj
現在指向參考內存位置null
。
從null (C# Reference)上MSDN:
空關鍵字是表示一個空引用,一個不指向任何對象文字。
如果您還沒有指定它以前指向其他任何對象,該對象將有資格被GC收集。
在內部它意味着這個對象在不被視爲根。並且不會被添加到可用對象圖中。
因此,它將被視爲collect'able。 (非確定性時間)。
您需要明白引用類型(類)實際上是指向內存中數據的指針。實質上,它所做的就是將指針(它只是包含數據地址的一塊內存)設置爲零值,或者將其設置爲空值。
實際上,這意味着如果沒有其他數據引用,garbace收集器可能會在任何時候刪除它。
技術上,obj
是當你說A obj = new A();
包含A
類型的對象上堆內存的位置的替代名稱,但如果你然後說obj = null;
然後obj
現在引用行不通的。
此外,之前由類型A的對象佔用的內存(其中obj
是別名)會在GC認爲它是正確的時間時由GC返回給操作系統。
這意味着obj
指向無處,並且A
類型的原始引用實例轉到gen0。 如果A
是實現IDisposable
的類型,那麼當調用Dispose
時,A持有的資源將被釋放,並被抑制爲最終確定。如果一次性用品沒有明確處置,那麼它將等待最終確定。
如果之後的執行再次引用它,它來自gen1,然後可能是gen2,它的壽命將會更長。
gc開始收集垃圾的時候,gen0s將成爲第一選擇,然後是gen1,gen2。
null
不是一個對象。這是一個沒有提及任何內容的特殊參考值。如果您嘗試使用null
引用與對象進行通信,則會拋出錯誤,因爲沒有對象。
還有一種稱爲Null Object Pattern的設計模式,它被創建用於解決需要特殊情況的參考文獻的問題。 A 空對象在這個模式中是一個具有「中立」行爲的對象;也就是說,當被要求做某件事實際上什麼都不做,並且當被要求返回一個值時返回零,空字符串,空列表和其他安全的中立對象。
請勿混淆空對象與特殊null
參考。
A obj = new A();
參考變量OBJ是甲類型。您正在創建一個A的實例並將其參考分配給obj。 obj現在引用A的實例。
的obj = NULL
上述分配說OBJ現在引用空。那沒什麼。現在新創建的A實例超出了參考範圍,最終將會收集垃圾收集。
我用我的想象力來填寫問號。請隨時恢復我的更改。 – 2013-03-24 11:56:23