Which object is not eligible for garbage collection after method m1 returns? My understanding inside the method m1() i1,i2,i3,i4 refers to each I() object,can anyone please explain i1.other(i3).
posted 9 years ago
Each instance of I has a variable "other" that holds a reference to another instance of I.
Assigns the object reference i3 to i1's instance variable other. There by giving i1 a reference to the object currently referenced by i3.
Lets call the 4 objects created in these 2 lines O1, O2, O3, O4.
So at the end (before returning) of m1()
i1 is a reference to O1 i2 is a reference to O2 i3 is a reference to O3 i4 is a reference to O4
O1.other is a reference to O3 O3.other is a reference to O2 O2.other is a reference to O1
04.other is a reference to O4.
But after returning from m1() no live thread has a reference to O1, O2, O3, or O4 so I would think they are all eligible for garbage collection. You don't keep a reference to the J object created, so its eligible also. If the program didn't terminate after the call to m1() the array object reference by args wouldn't be eligible for garbage collection.