• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

garbage collection doubt

 
sunitha thejaswi
Ranch Hand
Posts: 34
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
please explain the answer of this question

class I {
private String name;
public String toString() {return name;}
public I(String s) {name = s;}
}
class J {
private static void m1(I[] a1) {a1 = null;}
public static void main (String[] args) {
I[] a1 = new I[3]; // 1
a1[0] = new I("A"); // 2
a1[1] = new I("B"); // 3
a1[2] = new I("C"); // 4
m1(a1);
for (int i = 0; i < a1.length; i++) {
System.out.print(a1[i]);
}}}

After method m1 returns, the object created on which line is eligible for garbage collection?
a. 1
b. 2
c. 3
d. 4
e. Compile-time error
f. Run-time error
g. None of the above


answer is g:none of the above

when array a1 is passed to method m1 refrence to array object a1 is passed.
Then when reference of a1 is made null why doesn't it reflect in the calling method.
why is it not ready for garbage collection.

please explain..
Thank you,
sunitha
 
Steve Morrow
Ranch Hand
Posts: 657
Clojure Spring VI Editor
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The a1 inside the method m1() is *not* the same variable as the a1 in the main() method; it's a copy. You set the copied variable to the null reference in m1(), but the a1 reference in main() still points to the array object. Since a reference is retained, the array is not eligible for GC. As the array retains references to the I objects that get created, they're not eligible, either.

Hope this helps.
 
Lakshmanan Arunachalam
Ranch Hand
Posts: 99
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

when array a1 is passed to method m1 refrence to array object a1 is passed.


Small change in the above statement,

when array a1 is passed to method m1, it means "the value of reference variable" a1 is passed. i.e a variable whose value is copied from a1 referene. Hence if you change the value of that variable inside method m1, it wont affect the array a1
 
sunitha thejaswi
Ranch Hand
Posts: 34
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
thank you now i get the point
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic