Java Programming - Garbage Collections - Discussion

Discussion Forum : Garbage Collections - General Questions (Q.No. 4)
4.
class Test 
{  
    private Demo d; 
    void start() 
    {  
        d = new Demo(); 
        this.takeDemo(d); /* Line 7 */
    } /* Line 8 */
    void takeDemo(Demo demo) 
    { 
        demo = null;  
        demo = new Demo(); 
    } 
}
When is the Demo object eligible for garbage collection?
After line 7
After line 8
After the start() method completes
When the instance running this code is made eligible for garbage collection.
Answer: Option
Explanation:

Option D is correct. By a process of elimination.

Option A is wrong. The variable d is a member of the Test class and is never directly set to null.

Option B is wrong. A copy of the variable d is set to null and not the actual variable d.

Option C is wrong. The variable d exists outside the start() method (it is a class member). So, when the start() method finishes the variable d still holds a reference.

Discussion:
12 comments Page 1 of 2.

Nikhil said:   4 years ago
When a method is called it goes inside the stack frame. When the method is popped from the stack, all its members dies and if some objects were created inside it then these objects becomes unreachable or anonymous after method execution and thus becomes eligible for garbage collection.

Example

package garbagecollector;
public class NullifyObj {
public static void main(String[] args)
{
// TODO Auto-generated method stub
NullifyObj v = new NullifyObj();
v.show();
Runtime r =Runtime.getRuntime();
r.gc();
}
public void show() {
NullifyObj n = new NullifyObj();
}
public void finalize() {
System.out.println("nullify Method object");
}
}

Ken said:   8 years ago
As mentioned by "Sir Dev" a bit of clarification on the wording, could you consider changing: "When is the Demo object eligible for garbage collection?" to "When is Test's Demo instance eligible for garbage collection?" OR "When is the Demo object 'd' eligible for garbage collection?" as the Demo object created in takeDemo could be confused with the instance variable for which the question assumes.

Sr Dev said:   1 decade ago
Instance of Demo which got created at line 12 is eligible for garbage collection after "takeDemo" method because the scope of the reference become out. So please review it and ask like "When will the the instance created at line 6 is eligible for Garbage Collection"

Atul said:   1 decade ago
The object created before calling takeDemo method will be eligible because in first statement of the method called, demo=null; is set, and in java objects always gets passed by reference so it will get set to null, and object will be eligible for GC.

Saurabh Gupta said:   8 years ago
@Atul.

You just said exactly what was in my mind. And @Flashy and @Uwe consider the class name as Demo instead of Test.

As Atul said demo = null is the line which makes the object available for GC and this option is not given in the question.

Bishoy said:   1 decade ago
@Sr Dev.

The question is confusing that way, instead of saying "the Demo object" in the question, you have to define which object of the two you mean.

Rajiv said:   1 decade ago
It seems that the static modifier must be used with private Demo d.

So that we treat it as class variable and then the explanation will be ok for this question.

Surendra j said:   8 years ago
This program show runtime error, then how is possible By a process of elimination?

BHS said:   1 decade ago
Is it just me or someone else too feels option B and C are technically same?

Flashy said:   9 years ago
How can you define a new Demo() when there is no Demo class?


Post your comments here:

Your comments will be displayed after verification.