Sobes.tech
Senior

Чӣ гуна тақсимоти объектҳо дар тӯпҳо сурат мегирад?

sobes.tech AI

Ҷавоб аз AI

Дар .NET, кӯча (heap) ба ду насли асосӣ тақсим мешавад: Насли 0 ва Насли 1. Агар лозим шавад, Насли 2 эҷод мешавад.

  • Насли 0 (Gen 0): Объектҳои нав эҷодшуда дар ин ҷо ҷойгир мешаванд. Ин насли ҷавонтар ва хурдтар аст. Ҷамъовари партовҳо (GC) ин наслиро бештар санҷида ва тоза мекунад. Объектҳое, ки аз ҷамъоварӣ дар Gen 0 зинда мемонанд, ба Gen 1 кӯчонида мешаванд.
  • Насли 1 (Gen 1): Объектҳое, ки аз ҷамъоварӣ дар Gen 0 гузаштаанд, дар ин ҷо ҳастанд. GC ин наслиро камтар аз Gen 0 санҷида мекунад. Объектҳое, ки аз ҷамъоварӣ дар Gen 1 зинда мемонанд, ба Gen 2 кӯчонида мешаванд.
  • Насли 2 (Gen 2): Объектҳои дарозмуддат аз Gen 1 ва инчунин объектҳои калонро дар бар мегирад. GC ин наслиро камтар санҷида, вақти бештарро талаб мекунад. Ҷамъоварии дар Gen 2 бештар вақтро мегирад.
  • Heap барои объектҳои калон (LOH): минтақаи махсус дар heap барои объектҳои аз 85 KB ё бештар. Объектҳо дар LOH аз ҷониби GC кӯчонида намешаванд, зеро кӯчониданашон хеле гарон аст. Тозакунӣ дар LOH ҳамзамон бо ҷамъоварии Gen 2 сурат мегирад.

Тақсимот ба наслҳо асос ёфтааст ба гипотеза, ки объектҳои нав эҷодшуда зудтар ба партов табдил меёбанд, нисбат ба объектҳои дарозмуддат. Ин усул имкон медиҳад, ки GC мемориро самаранок тоза кунад, бо диққат ба наслҳои ҷавонтар.

// Мисоли эҷоди объектҳо дар Gen 0
object obj1 = new object();
string str1 = "Hello";

// Пас аз аввалин ҷамъоварии партовҳо дар Gen 0, агар obj1 ва str1 ҳанӯз зарур бошанд,
// онҳо метавонанд ба Gen 1 кӯчонида шаванд.

// Объекти дарозмуддат
List<int> longLivedList = new List<int>();
for (int i = 0; i < 1000; i++)
{
    longLivedList.Add(i);
}
// Ин рӯйхат бо вақти зиёд ба Gen 2 боло меравад.

// Объекти калон, ки дар LOH ҷойгир мешавад
byte[] largeArray = new byte[100 * 1024]; // Андоза > 85 KB