Senior
Wie erfolgt die Aufteilung von Objekten in den Heaps?
sobes.tech KI
Antwort von AI
In .NET wird der Heap in zwei Hauptgenerationen unterteilt: Generation 0 und Generation 1. Bei Bedarf wird die Generation 2 erstellt.
- Generation 0 (Gen 0): Neue Objekte werden hier platziert. Es ist die jüngste und kleinste Generation. Der Garbage Collector (GC) überprüft und bereinigt diese Generation am häufigsten. Objekte, die die Sammlung in Gen 0 überleben, werden in Gen 1 verschoben.
- Generation 1 (Gen 1): Enthält Objekte, die die Sammlung in Gen 0 überlebt haben. Der GC überprüft diese Generation seltener als Gen 0. Objekte, die die Sammlung in Gen 1 überleben, werden in Gen 2 verschoben.
- Generation 2 (Gen 2): Enthält langlebige Objekte aus Gen 1 sowie große Objekte. Der GC überprüft diese Generation am seltensten. Die Sammlung in Gen 2 ist zeitaufwändiger.
- Large Object Heap (LOH): Spezieller Bereich des Heaps für Objekte ab 85 KB. Objekte im LOH werden vom GC nicht verschoben, da das Verschieben sehr teuer ist. Die Bereinigung des LOH erfolgt zusammen mit der Sammlung in Gen 2.
Die Aufteilung in Generationen basiert auf der Hypothese, dass kürzlich erstellte Objekte schneller zu Müll werden als langlebige. Dieser Ansatz ermöglicht es dem GC, den Speicher effizient zu bereinigen, indem er sich auf die jüngsten Generationen konzentriert.
// Beispiel für die Erstellung von Objekten in Generation 0
object obj1 = new object();
string str1 = "Hello";
// Nach der ersten Müllsammlung in Gen 0 können obj1 und str1 noch benötigt werden,
// sie können in Generation 1 verschoben werden.
// Langlebiges Objekt
List<int> longLivedList = new List<int>();
for (int i = 0; i < 1000; i++)
{
longLivedList.Add(i);
}
// Diese Liste kann mit der Zeit in Gen 2 aufsteigen.
// Großes Objekt, das im LOH platziert wird
byte[] largeArray = new byte[100 * 1024]; // Größe > 85 KB