Sobes.tech
Junior — Middle

Koje posledice nastaju ako dva objekta u Javi međusobno drže putem jakih referenci?

sobes.tech АИ

Одговор од АИ

Ako dva objekta u Java održavaju jedno drugo snažnim referencama, javlja se situacija zvana ciklička referenca. U standardnom sakupljaču smeća Java (GC), to ne dovodi do curenja memorije, jer GC koristi algoritme brojenja dostupnosti: ako objekti nisu dostupni iz korenskih referenci (npr. sa steka ili statičkih promenljivih), biće sakupljeni, čak i ako se međusobno referenciraju.

Međutim, ako su objekti u aktivnoj oblasti dostupnosti, neće biti uklonjeni, što može dovesti do povećanja potrošnje memorije.

Za razliku od nekih drugih jezika sa brojanjem referenci (npr. Objective-C), cikličke reference u Java nisu problem za sakupljač smeća.

Primer:

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

// Ako se objekti a i b međusobno referenciraju, ali nisu dostupni iz korena, GC će ih ukloniti.