What I am asking might be a stupid question so please pardon me for that. So it goes like this :
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;
}
So in above scenario, I am creating lot of Boss objects and then de-referencing them(I know I don't need to write "b = null", but i did it for clarity of my question). In normal scenario, I would have marked them to garbage collection, by doeing this, but because in this scenario, I am adding those Boss objects in List collection, are they marked for GC or not? If not then why? And how does List collection work internally to hold references for each Object added, so as to avoid garbage collection?
[EDIT]
The scope of question is only limited to the individual Boss objects created in for
loop, considering that this method returns the reference of the List to the outside world.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With