I am working on the OCA Java certification and unsure of how to understand the answer to one question.
public class Test { public static void main(String[] args){ Student s1 = new Student("o1"); Student s2 = new Student("o2"); Student s3 = new Student("o3"); s1=s3; s3=s2; s2=null; //HERE } }
The question is which object will be available for garbage collection after the //HERE point.
The answer provided by the online test is : One object (o1).
Can someone explain me why?
Advertisement
Answer
Consider a simple class Student.
Step 1 :
Student s1 = new Student("s1"); Student s2 = new Student("s2"); Student s3 = new Student("s3");
s1, s2, s3 are referencing 3 object in the heap space
Step 2 :
Student s1 = s3;
s1 is now referencing the s3 object in the heap space
the object s1 in the heap space has lost his reference
Step 3 :
Student s1 = s3; Student s3 = s2;
Variable s1 reference s3 heap space
Variable s3 reference s2 heap space
Step 4 :
Student s1 = s3; Student s3 = s2; Student s2 = null;
Variable s1 reference s3 heap space
Variable s3 reference s2 heap space
Variable s2 lost his reference (null pointer)
Conclusion :
After line 11, one object is eligible for garbage collection