Junior — Middle
Milyen következményekkel jár, ha két Java-objektum erős hivatkozásokkal tartja egymást?
sobes.tech MI
Válasz az MI-től
Ha két objektum Java-ban erős hivatkozásokkal tartja egymást, akkor ciklikus hivatkozásnak nevezett helyzet alakul ki. A Java standard szemétgyűjtője (GC) nem vezet memória szivárgáshoz, mivel a GC elérhetőség-számlálási algoritmusokat használ: ha az objektumok nem érhetők el a gyökérhivatkozásokból (például a veremből vagy statikus változókból), akkor összegyűjtik őket, még akkor is, ha egymásra hivatkoznak.
Azonban, ha az objektumok aktív elérhetőségi területen vannak, nem kerülnek eltávolításra, ami növelheti a memóriahasználatot.
Néhány más nyelvhez képest (például Objective-C) a ciklikus hivatkozások nem jelentenek problémát a szemétgyűjtő számára Java-ban.
Példa:
class A {
B b;
}
class B {
A a;
}
// Ha az a és b objektumok egymásra hivatkoznak, de nem érhetők el a gyökérből, a GC eltávolítja őket.