aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Garbage Collection Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Garbage Collection" Watch "Garbage Collection" New topic
Author

Garbage Collection

Brian Podolny
Ranch Hand

Joined: Aug 29, 2000
Posts: 32
The answer to the following question is B - no way to tell.
However, I think it should be A - none. Any thoughts?
<pre>
1. public void countDown()
2. for( int i = 10; i >= 0; i-- ){
3. String tmp = Integer.toString( i );
4. System.out.println( tmp );
5. }
6. System.gc();
7. System.out.println("Boom!");
8. }</pre>
When the program reaches line 7, how many of the String Objects
created in line 3 will have been garbage collected?
Assume that the System.out object is not keeping a reference.
A - none
B - there is no way to tell
C - 10
D - 11
I thought that objects created in a method are not eligible for
garbage collection ( under any circumstances ) until that method
has been exited.
Thanks

[This message has been edited by Brian Podolny (edited September 02, 2000).]
Tony Alicea
Desperado
Sheriff

Joined: Jan 30, 2000
Posts: 3222
    
    5
You have to read the question carefully:
"When the program reaches line 7, how many of the String Objects created in line 3 will have been garbage collected?"
Answer: No way to tell. Eligible for GC does not mean GC'd.


Tony Alicea
Senior Java Web Application Developer, SCPJ2, SCWCD
William Brogden
Author and all-around good cowpoke
Rancher

Joined: Mar 22, 2000
Posts: 12787
    
    5
The key wording here is "will have been" - the call to System.gc() - requests that the JVM make an effort to run GC but that is not a guarantee.
When line 7 is reached, there will be no references to the first ten Strings at all so they are eligible for collection.
There may be a reference to the final String but that depends on the cleverness of the compiler - turns out to be a complex story.
Bill
Brian Podolny
Ranch Hand

Joined: Aug 29, 2000
Posts: 32
Thanks for your response.
While I know it is impossible to tell when something actually has been Garbage Collected --- isn't it, in some cases, possible to rule out that something has been garbage collected.
For example:
1. Object o = new Object();
2. System.gc();
We can state with certainty that the Object referenced by o has not been garbage collected because there is still a reference to it. In your mock test question isn't it true that while there are no references to the objects created in the for loop that we can say for certain that the objects have not been garbage collected because with or without a reference they are not eligible for garbage collection until the method has been exited?
William Brogden
Author and all-around good cowpoke
Rancher

Joined: Mar 22, 2000
Posts: 12787
    
    5
"In your mock test question isn't it true that while there are no references to the objects created in the for loop that we can say for certain that the objects have not been garbage ollected because with or without a reference they are not eligible for garbage collection until the method has been exited?"
That is absolutely NOT true. It doesn't matter which method the object was created in, when there are no longer references to the object, it is eligible for collection.
The thing that causes confusion is where in the example method a reference ceases to exist in the variable that has a scope only inside the loop. Fortunately you are not going to get a question about GC this weird on the real exam.
Bill
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Garbage Collection