Koje su faze čišćenja resursa u upravljanju memorijom?
sobes.tech АИ
Одговор од АИ
Upravljanje memorijom u .NET uključuje sledeće faze čišćenja resursa:
-
Faza označavanja (Marking): Sakupljač smeća određuje koje objekte su dostupni iz korenskih objekata (promenljive steka, statičke promenljive i registri). Nedostupni objekti se označavaju za sakupljanje.
-
Faza preseljenja (Relocating/Compacting): Dostupni objekti se pomeraju (kompaktuju) u memoriji, oslobađajući kontinualni prostor i smanjujući fragmentaciju. Tokom ove faze, ažuriraju se pokazivači na preseljene objekte. Ova faza je prisutna samo u verzijama koje nisu u pozadini.
-
Faza čišćenja (Sweeping): Metode
Finalizeobjekata označenih za sakupljanje se pozivaju, ako su definisane. Zatim se oslobađa memorija koju su zauzeli ti objekti.
Primer korišćenja Finalize (nije preporučljivo, bolje je koristiti IDisposable):
public class ResourceHolder
{
// Resurs koji zahteva oslobađanje
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Metod finalizacije, poziva ga sakupljač smeća
~ResourceHolder()
{
// Oslobađanje neuređenog resursa
_writer?.Dispose();
}
// Drugi metodi klase...
}