Sobes.tech
Junior — Middle

Aké dôsledky vzniknú, ak si dva objekty v Jave navzájom držia pomocou silných odkazov?

sobes.tech AI

Odpoveď od AI

Ak dva objekta v Java držia navzájom silné odkazy, vznikne situácia nazývaná cyklický odkaz. V štandardnom zberači odpadu Java (GC) to ne spôsobí únik pamäte, pretože GC používa algoritmy počítania dostupnosti: ak objekty nie sú dostupné z koreňových odkazov (napríklad zo zásobníka alebo statických premenných), budú zozbierané, aj keď sa odkazujú na seba navzájom.

Avšak, ak sú objekty v aktívnej oblasti dostupnosti, nebudú odstránené, čo môže viesť k zvýšeniu spotreby pamäte.

Na rozdiel od niektorých iných jazykov s počítaním odkazov (napríklad Objective-C), cyklické odkazy v Java nie sú problémom pre zberač odpadu.

Príklad:

class A {
    B b;
}
class B {
    A a;
}

// Ak sa objekty a a b odkazujú navzájom, ale nie sú dostupné z koreňa, GC ich odstráni.