To, o co pytam, może być głupim pytaniem, więc proszę, wybaczcie mi to. Więc to idzie tak:Czy ten obiekt java kwalifikuje się do zbierania śmieci na liście
List<Boss> bossList = new ArrayList<Boss>();
Boss b = null;
for(Employee e : List<Employee> myList){
b = new Boss();
b.setEmployee(e);
bossList.add(b);
b = null;
}
Tak więc w powyższym scenariuszu tworzę wiele obiektów Boss, a następnie de-przedstawieniu ich (wiem, że nie trzeba pisać „b = null”, ale zrobiłem to dla jasności mojego pytania). W normalnym scenariuszu oznaczałbym je do usuwania śmieci, robiąc to, ale ponieważ w tym scenariuszu dodaję te obiekty Bossa do kolekcji List, czy są one oznaczone jako GC, czy nie? Jeśli nie, to dlaczego? W jaki sposób kolekcja List działa wewnętrznie w celu przechowywania referencji dla każdego dodawanego obiektu, aby uniknąć zbierania śmieci?
[EDIT]
Zakres pytanie ogranicza się tylko do poszczególnych obiektów Boss utworzonych w for
pętli, biorąc pod uwagę, że metoda ta zwraca referencję Listy do świata zewnętrznego.
Sam obiekt, który umieściłeś na liście, jest oczywiście niedostępny dla GC, ponieważ odniesienie do niego nadal istnieje, nawet jeśli anulujesz 'b'. – NilsH
Obiekt nie może być zbędny, jeśli istnieje jakiś sposób w bieżącym stanie programu, aby został osiągnięty (z wyjątkiem specjalnej klasy WeakReference i powiązanych z nią klas). Wystarczy jedno odniesienie, bez względu na to gdzie, z aktywnego kodu. – Patashu