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)}");
}
R彼らはすぐに収集できるように小さいことが
Generation of array 2
Generation of local int variable 0
Generation of local string variable 0
正しく理解しました。オブジェクトは世代0で始まり、時間の経過とともに生き残る世代に移ります。このような巨大なオブジェクトが短命になる可能性は低いという仮説のため、古い世代に直接移動する非常に大きなオブジェクトは例外です。 –