C# 在.net中,CLR如何知道特定对象已准备好进行垃圾收集?
我很好奇clr如何知道某个对象没有被任何其他对象使用,它是死的我们知道垃圾收集器的基本原理,但在内部clr如何找到死的对象。clr如何知道对象处于死的位置。 垃圾收集有以下几个阶段:C# 在.net中,CLR如何知道特定对象已准备好进行垃圾收集?,c#,.net,clr,C#,.net,Clr,我很好奇clr如何知道某个对象没有被任何其他对象使用,它是死的我们知道垃圾收集器的基本原理,但在内部clr如何找到死的对象。clr如何知道对象处于死的位置。 垃圾收集有以下几个阶段: 查找并创建所有活动对象列表的标记阶段 一个重定位阶段,用于更新对所选对象的引用 将被压实 一个压缩阶段,回收死者占用的空间 对象并压缩幸存的对象。压实阶段 将经过垃圾收集的对象移到 段的较旧端 垃圾收集器使用以下信息确定对象是否处于活动状态: 堆叠根。即时(JIT)提供的堆栈变量 编译器和堆栈遍历器 垃圾收集
- 查找并创建所有活动对象列表的标记阶段
- 一个重定位阶段,用于更新对所选对象的引用 将被压实
- 一个压缩阶段,回收死者占用的空间 对象并压缩幸存的对象。压实阶段 将经过垃圾收集的对象移到 段的较旧端
- 堆叠根。即时(JIT)提供的堆栈变量 编译器和堆栈遍历器
- 垃圾收集句柄。处理指向托管对象和 可以由用户代码或公共语言运行库分配
- 静态数据。应用程序域中的静态对象可能是 引用其他对象。每个应用程序域都跟踪其 静态对象