gpt4 book ai didi

.NET 垃圾收集器基础知识

转载 作者:行者123 更新时间:2023-12-02 05:15:16 26 4
gpt4 key购买 nike

<分区>

如果这个问题的答案很简单,我深表歉意。但我仍然无法自己弄清楚这一点。

.NET 中的垃圾收集器如何识别堆上的哪些对象是垃圾,哪些不是?

假设一个 .NET 应用程序正在运行,并且在某个时间点发生了垃圾收集(为了简单起见,我们省略了生成和终结队列)。

现在应用程序可能有:

  1. 堆栈变量指向堆上的对象。
  2. 包含堆上对象地址的寄存器。
  3. 指向堆上对象的静态变量。

这就是我假设 GC 的工作方式。

  1. 它取消引用每个这样的地址并最终到达堆上的对象。
  2. 它将对象标记为非垃圾(通过使用同步块(synchronized block)索引),因为一些变量仍然指向它。
  3. 它对所有地址(在大多数文章中出于某种原因称为根)执行此操作
  4. 现在,由于 .NET 运行时具有有关每个对象的类型的信息,它可以计算每个对象的大小,从而计算它占用的堆内存块。对于所有标记的对象,它保留占用的内存块。
  5. 剩余的内存被释放、压缩,如有必要,其他对象被重新定位(并更新它们的地址)。

我的理解正确吗?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com