Kiedy Garbage Collector może usunąć obiekt (pytanie z SCJP)

Kiedy Garbage Collector może usunąć obiekt (pytanie z SCJP)
FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Pytanie z książki do SCJP:

user image

http://img848.imageshack.us/img848/7588/skanv.png

Rozumiem, dlaczego c1 można usunąć GC, ale dlaczego c3 nie będzie usunięty (w końcu też zostanie przypisany null)?

ucho
  • Rejestracja: dni
  • Ostatnio: dni
1

Co rozumiesz przez "obiekt c3"? Były utworzone tylko dwa obiekty, do jednego referencję trzymało przez chwilę c1, do drugiego referencję trzyma c2, w c3 był zawsze tylko i wyłącznie null.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Krótka piłka: GC może zebrać obiekt tylko wtedy, gdy nie można się do niego w żaden sposób dostać. Zmienne w Javie dzielą się na prymitywy i referencje. Prymitywy nie są obsługiwane przez GC, zbierane są razem z obiektem rodzicem. Jeśli chodzi o referencje to może być dowolnie wiele referencji do jednego obiektu i GC nie może usunąć obiektu dopóki istnieje chociaż jedna referencja do niego.

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Wielkie dzięki za błyskawiczne odpowiedzi.

Faktycznie po obiekcie c3 nie ma GC co sprzątać. ; )

KO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 36
1
fantazyn napisał(a)

Rozumiem, dlaczego c1 można usunąć GC, ale dlaczego c3 nie będzie usunięty (w końcu też zostanie przypisany null)?

A gdzie w tym kodzie jest tworzony obiekt c3 przez new Cardboard() ??

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.