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.

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"

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.

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

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.

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

Uwe said:   8 years ago
I too have the same doubt @Flashy.

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.

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

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.


Post your comments here:

Your comments will be displayed after verification.