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.