Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is this java Object eligible for garbage collection in List

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.

like image 786
sunny_dev Avatar asked May 31 '13 05:05

sunny_dev


2 Answers

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.

like image 166
Daniel Lerps Avatar answered Oct 19 '22 03:10

Daniel Lerps


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.

like image 45
Evgeniy Dorofeev Avatar answered Oct 19 '22 02:10

Evgeniy Dorofeev