簡體   English   中英

垃圾收集如何收集自引用對象?

[英]How does garbage collection collect self-referential objects?

如果某個對象未被任何其他對象引用,則它將由.NET CLR垃圾收集器收集。

但是,如果objA引用objBobjB引用objCobjC引用回objA ,垃圾收集器如何確定它們(作為一個整體)可以被收集?

CLR使用稱為標記和掃描的技術。

作為該技術的一部分,可以將每個對象視為最初標記為收集。 然后,CLR遍歷每個可訪問對象,從您的全局(靜態字段等)作為根開始,並清除每個可步移對象上的標記。 然后掃描剩余的標記對象。

請記住,這個“標記”是概念性的; 實際上,對象很可能被添加到集合集中。

在循環自引用對象的情況下,將不會從應用程序中找到對象的引用,因此算法將永遠不會到達那些對象以“取消標記”它們。

GC具有所有已創建對象的列表。 在garbarge過程中,它從全局根(如靜態字段)開始,並遍歷每個引用的對象。 可以銷毀所有未被命中的列表中的每個對象。

如果無法點擊objA,objB或objC,將收集所有這些對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM