Junior — Middle
Kādas sekas rodas, ja divi objekti Java valodā viens otru tur ar stiprajām saitēm?
sobes.tech AI
Atbilde no AI
Ja divi objekti Java uztur viens otru ar stiprajām atsaucēm, rodas situācija, ko sauc par ciklisku atsauci. Standarta Java atkritumu savācējs (GC) tas nerada atmiņas noplūdi, jo GC izmanto pieejamības skaitīšanas algoritmus: ja objekti nav pieejami no saknes atsaucēm (piemēram, no steka vai statiskajām mainīgajām), tie tiks savākti, pat ja tie atsaucas viens uz otru.
Tomēr, ja objekti atrodas aktīvā pieejamības zonā, tie netiks dzēsti, kas var novest pie atmiņas patēriņa palielināšanās.
Atšķirībā no dažām citām valodām ar atsauču skaitīšanu (piemēram, Objective-C), cikliskās atsauces Java nav problēma atkritumu savācējam.
Piemērs:
class A {
B b;
}
class B {
A a;
}
// Ja objekti a un b atsaucas viens uz otru, bet nav pieejami no saknes, GC tos izdzēsīs.