Search code examples
javagarbage-collection

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?


Solution

  • 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