gpt4 book ai didi

c# - GC 世代 - 收集问题

转载 作者:行者123 更新时间:2023-11-30 21:03:30 26 4
gpt4 key购买 nike

给定以下代码:

namespace GcDemo
{
class Program
{
static void Main(string[] args)
{
var list = new List<object>();
Console.WriteLine("list is in {0} generation.", GC.GetGeneration(list));
GC.Collect();
Console.WriteLine("list is in {0} generation.", GC.GetGeneration(list));
GC.Collect();
list.Add(new object());
Console.WriteLine("list is in {0} generation. object is in {1} generation.", GC.GetGeneration(list), GC.GetGeneration(list[0]));
GC.Collect(0);
Console.WriteLine("list is in {0} generation. object is in {1} generation.", GC.GetGeneration(list), GC.GetGeneration(list[0]));

}
}
}

列表对象在第 2 代中,而它是第 0 代中唯一的引用列表 [0] 对象。它怎么知道不在 GC.Collect(0) 中收集它?

最佳答案

This article对它的工作原理有一个简单的描述;阅读“让世代与写障碍一起工作”部分。 This是另一篇很好的博客文章,更详细地解释了该技术。

执行摘要是 CLR 发出代码,因此它可以检测 Gen2 对象的写入时间。它将写入记录到它在执行 Gen0 收集时检查的数据结构(“卡表”)中;这允许它找到 Gen2 -> Gen0 引用,而无需遍历内存中的所有对象。

关于c# - GC 世代 - 收集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12809365/

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