在.net中CLR如何知道特定对象已准备好收集垃圾回收?

时间:2017-05-22 05:51:31

标签: c# .net clr

我很好奇clr如何知道任何其他对象没有使用特定对象并且它已经死了我们知道垃圾收集器的基本但是内部clr如何找到死对象.How clr知道对象处于死区。

1 个答案:

答案 0 :(得分:1)

https://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx#Anchor_4

垃圾收集包含以下阶段:

  • 查找并创建所有活动对象列表的标记阶段。
  • 重定位阶段,用于更新对象的引用 将被压缩。
  • 压缩阶段,回收死者占据的空间 对象和压缩幸存的对象。压缩阶段 将存在垃圾收集的对象移向 该部分较旧的一端。

垃圾收集器使用以下信息来确定对象是否有效:

  • 堆栈根。由即时(JIT)提供的堆栈变量 编译器和堆栈walker。

  • 垃圾收集句柄。指向托管对象的句柄和 可以由用户代码或公共语言运行库分配。

  • 静态数据。应用程序域中的静态对象可能是 引用其他对象。每个应用程序域都会跟踪它 静态对象。