Junior — Middle
Milyen fejlesztési szakaszokat lehet kiemelni az objektumok életciklusában a kezelt memóriában?
sobes.tech MI
Válasz az MI-től
A C#-ban a kezelhető memóriában lévő objektumok életciklusa több szakaszra osztható:
- Létrehozás (Allocation) — az objektum a
newoperátor segítségével jön létre a kezelt heap-en. - Használat (Usage) — az objektum a programban használatban van, és a rá mutató hivatkozások változókban tárolódnak.
- Szemétgyűjtés (Garbage Collection) — amikor már nincs rá hivatkozás, a szemétgyűjtő jelöli, mint törlésre jelöltet.
- Memória felszabadítása (Finalization és Deallocation) — ha az objektumnak van
Finalizevégzője, az a memória felszabadítása előtt meghívódik; ezután a memória felszabadul.
Fontos pont — a .NET szemétgyűjtője generációk szerint működik (Gen 0, Gen 1, Gen 2), ami optimalizálja a teljesítményt és a tisztítási időt.
Példa:
class MyClass {
~MyClass() {
// Végző, amit az objektum törlése előtt hívnak
}
}
var obj = new MyClass(); // Létrehozás
// Az obj használata
obj = null; // Az objektum már nem elérhető
// A szemétgyűjtő később felszabadítja a memóriát