Sobes.tech
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.