Welche Phasen der Ressourcenbereinigung im Speicher-Management gibt es?
sobes.tech KI
Antwort von AI
Das Speicherverwaltungssystem in .NET umfasst die folgenden Phasen der Ressourcenbereinigung:
-
Markierungsphase (Marking): Der Garbage Collector bestimmt, welche Objekte aus den Wurzelobjekten (Stapelvariablen, statische Variablen und Register) zugänglich sind. Nicht zugängliche Objekte werden markiert, um gesammelt zu werden.
-
Verschiebungsphase (Relocating/Compacting): Zugängliche Objekte werden im Speicher verschoben (konsolidiert), um zusammenhängenden Raum freizugeben und Fragmentierung zu verringern. Dabei werden die Zeiger auf die verschobenen Objekte aktualisiert. Diese Phase ist nur in Nicht-Hintergrund-Builds vorhanden.
-
Reinigung (Sweeping): Die
Finalize-Methoden der für die Sammlung markierten Objekte werden aufgerufen, falls sie definiert sind. Anschließend wird der von diesen Objekten belegte Speicher freigegeben.
Beispiel für die Verwendung von Finalize (nicht empfohlen, besser ist die Verwendung von IDisposable):
public class ResourceHolder
{
// Ressource, die freigegeben werden muss
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Finalisierungs-Methode, vom Garbage Collector aufgerufen
~ResourceHolder()
{
// Nicht verwaltete Ressource freigeben
_writer?.Dispose();
}
// Weitere Methoden der Klasse...
}