Senior
Kuidas toimub objektide jagamine virnades?
sobes.tech AI
Vastus AI-lt
.NETi mälu (heap) jaguneb kahe põhiklassi: 0. ja 1. põlvkond. Vajadusel luuakse 2. põlvkond.
- Põlvkond 0 (Gen 0): Siia paigutatakse loodud objektid. See on noorim ja väikseim mäluosa. Prügikoristaja (GC) kontrollib ja puhastab seda põlvkonda kõige sagedamini. Objekte, mis läbivad puhastuse Gen 0, liigutatakse Gen 1.
- Põlvkond 1 (Gen 1): Sisaldab objekte, mis on läbinud puhastuse Gen 0. GC kontrollib seda põlvkonda harvemini kui Gen 0. Objekte, mis läbivad puhastuse Gen 1, liigutatakse Gen 2.
- Põlvkond 2 (Gen 2): Sisaldab pikaajalisi objekte Gen 1-st ning ka suuri objekte. GC kontrollib seda põlvkonda kõige harvemini. Puhastamine Gen 2-s on kõige kulukam.
- Suurte objektide virn (LOH): Spetsiaalne mäluala suurte objektide jaoks, mille suurus on 85 KB või rohkem. LOH-i objektid ei liigu GC-ga, kuna nende liigutamine on väga kulukas. LOH-i puhastamine toimub koos Gen 2 puhastusega.
Põlvkondade jaotamine põhineb hüpoteesil, et hiljuti loodud objektid muutuvad prügi kiiremini kui pikaajalised. Selline lähenemine võimaldab GC-l tõhusalt mälu puhastada, keskendudes kõige noorematele põlvkondadele.
// Näide, kuidas luua objekte Põlvkonnas 0
object obj1 = new object();
string str1 = "Hello";
// Pärast esimest puhastust Gen 0, kui obj1 ja str1 on endiselt vajalikud,
// võivad need liikuda Gen 1-i.
// Pikaajaline objekt
List<int> longLivedList = new List<int>();
for (int i = 0; i < 1000; i++)
{
longLivedList.Add(i);
}
// See nimekiri võib aja jooksul tõusta kuni Gen 2.
// Suur objekt, mis paigutatakse LOH-i
byte[] largeArray = new byte[100 * 1024]; // Suurus > 85 KB