What I am asking might be a stupid question so please pardon me for that. So it goes like this :
List bossList = new ArrayList();
Bos
Here's what really happens with your code :
The Boss
objects will not be collected by the GarbageCollector
because they are still referenced in the code block that you are posted. bossList
is an ArrayList
which has an internal array of Object
thus holding references to those objects which are added to it.
I such a situation not only the references by you are considered but all referneces in all objects involved.
EDIT: Since you are returning the List in your code the objects will not be marked for garbage collection until the list is no longer referenced in your program.
Since java is pass by reference, whenever you add b
to bossList
, bossList
starts referencing the memory location which b is pointing to. So when b
nullified only link from b
to the reference is broken. Thus keeping the object accessible through bossList
.
ArrayList has Object[] elementData
internally. When you added b
to bossList
ArrayList assigned elementData[0] = b
. So when you assigned null
to b
the instance of Boss
is still referenced from elementData[0]
and cannot be GCed. But since ArrayList
instance is referenced only from method's variable after the method returns both ArrayList
and Boss
instances will be eligible for GC.