【发布时间】:2017-05-22 04:09:55
【问题描述】:
我知道 GC 有 3 (0, 1, 2) 代,但我想知道 GC 如何决定变量的代?
我认为所有变量都进入第 0 代,并在一段时间后移动到第 1 代和第 2 代。GC 决定代的大小是否重要?
程序1:
private static void Main(string[] args)
{
int a = 0;
string name = "Test";
var byteArray = new byte[10];
byteArray[4] = 4;
Console.WriteLine($"Generation of array {GC.GetGeneration(byteArray)}");
Console.WriteLine($"Generation of local int variable {GC.GetGeneration(a)}");
Console.WriteLine($"Generation of local string variable {GC.GetGeneration(name)}");
}
结果
Generation of array 0
Generation of local int variable 0
Generation of local string variable 0
程序2:
private static void Main(string[] args)
{
int a = 0;
string name = "Test";
var byteArray = new byte[100000000];
byteArray[4] = 4;
Console.WriteLine($"Generation of array {GC.GetGeneration(byteArray)}");
Console.WriteLine($"Generation of local int variable {GC.GetGeneration(a)}");
Console.WriteLine($"Generation of local string variable {GC.GetGeneration(name)}");
}
结果
Generation of array 2
Generation of local int variable 0
Generation of local string variable 0
【问题讨论】:
-
您理解正确。对象从第 0 代开始,然后随着时间的流逝而迁移到老一代。非常大的物体是个例外——它们直接传给老一代,因为这样的巨大物体不太可能是短暂的。
标签: c# memory-management garbage-collection