Sobes.tech
Senior

Hoe gebeurt de verdeling van objecten in de heaps?

sobes.tech AI

Antwoord van AI

In .NET wordt de heap (stapelgeheugen) verdeeld in twee hoofdgeneraties: Generatie 0 en Generatie 1. Indien nodig wordt Generatie 2 aangemaakt.

  • Generatie 0 (Gen 0): Nieuw aangemaakte objecten worden hier geplaatst. Dit is de jongste en kleinste generatie. De garbage collector (GC) controleert en ruimt deze generatie het vaakst op. Objecten die de collectie in Gen 0 overleven, worden naar Gen 1 verplaatst.
  • Generatie 1 (Gen 1): Bevat objecten die de collectie in Gen 0 hebben overleefd. De GC controleert deze generatie minder vaak dan Gen 0. Objecten die de collectie in Gen 1 overleven, worden naar Gen 2 verplaatst.
  • Generatie 2 (Gen 2): Bevat langdurige objecten uit Gen 1, evenals grote objecten. De GC controleert deze generatie het minst. De collectie in Gen 2 is het meest tijdrovend.
  • Large Object Heap (LOH): Een speciale gebied op de heap voor objecten van 85 KB of meer. Objecten in de LOH worden niet verplaatst door de GC, omdat verplaatsen erg kostbaar is. Het opschonen van de LOH gebeurt samen met de collectie van Gen 2.

De verdeling in generaties is gebaseerd op de hypothese dat recent gemaakte objecten sneller afval worden dan langdurige objecten. Deze aanpak stelt de GC in staat om het geheugen efficiënt op te schonen, met focus op de jongste generaties.

// Voorbeeld van het maken van objecten in Generatie 0
object obj1 = new object();
string str1 = "Hello";

// Na de eerste garbage collection in Gen 0, als obj1 en str1 nog nodig zijn,
// kunnen ze worden verplaatst naar Gen 1.

// Langdurig object
List<int> longLivedList = new List<int>();
for (int i = 0; i < 1000; i++)
{
    longLivedList.Add(i);
}
// Deze lijst kan na verloop van tijd omhoog gaan naar Gen 2.

// Groot object dat in LOH wordt geplaatst
byte[] largeArray = new byte[100 * 1024]; // Grootte > 85 KB