Middle
Hol tárolódnak a referencia típusok, és mi történik velük az alkalmazás futása közben?
sobes.tech MI
Válasz az MI-től
A referencia típusok a heap-ben (kupacban) tárolódnak.
Az alkalmazás futása közben a következő történik:
- Létrehozás: Amikor egy referencia típusú objektumot hozunk létre (például,
new MyClass()), akkor ennek az objektumnak a memóriája a heap-ben kerül lefoglalásra. A változó, ami tartalmazza, egy hivatkozást tartalmaz erre a memóriarészre. - Hozzáférés: A tárgy mezőihez és metódusaihoz való hozzáférés ezen a hivatkozáson keresztül történik.
- Szemétgyűjtés (Garbage Collection): Amikor egy objektum többé nem érhető el egy aktív programrészből (nincs rá hivatkozás), a szemétgyűjtő felszabadíthatja a heap-ben elfoglalt memóriát. Ez a folyamat automatikusan "háttérben" történik, és nem igényel explicit beavatkozást a fejlesztőtől. A szemétgyűjtő rendszeresen átvizsgálja a heap-et, megtalálja az elérhetetlen objektumokat, és visszaadja a memóriát a rendszernek.
- Módosítás: Az objektum tartalma a heap-ben változhat. Ha több referencia változó ugyanarra az objektumra mutat, a változások az állapotában más változók által is láthatók.
- Referencia újra hozzárendelése: Egy referencia változó újra hozzárendelhető másik objektumra vagy
null-ra.
Példa:
// String objektum létrehozása a heap-ben (karakterláncok - referencia típus)
String myString = "Hello";
// A myString_2 változó ugyanarra az objektumra mutat
String myString_2 = myString;
// Új String objektum létrehozása a heap-ben és a referencia újra hozzárendelése
myString = "World";
// Most myString egy másik objektumra mutat, míg myString_2 továbbra is az eredetire