Skip to content
Advertisement

Java object garbage collection

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

enter image description here

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

enter image description here

Step 3 :

Student s1 = s3;
Student s3 = s2;

Variable s1 reference s3 heap space

Variable s3 reference s2 heap space

enter image description here

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)

enter image description here

Conclusion :

After line 11, one object is eligible for garbage collection

Advertisement