Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Another doubt in Sarga's Test2

 
swati bannore
Ranch Hand
Posts: 201
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,
Check following question and please guide me accordingly.
Thanx Once Again
25)
At what point is the object anObj available for garbage collection.
01: public class Base{
02:
03: private void test() {
04:
05: String anObj = "sample";
06:
07: anObj.trim();
08:
09: anObj = anObj.toUpperCase();
10:
11: anObj = null;
12: }
13:
14: static public void main(String[] a) {
15: new Base().test();
16: }
17:
18: }
Select most appropriate answer
a) At line 5
b) At line 7
c) At line 8
d) At line 10
e) At line 12

Answer : d,means at line 10.
My Answer: When Object is getting null value at line 11,then how can it be avilable for garbage collection before i.e. at line 10.??
 
Jane Griscti
Ranch Hand
Posts: 3141
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Swati,
Line 9, <code>anObj = anObj.toUppercase()</code> will return a new String object; not the original (remember Strings are immutable).
Assuming literal strings are available for gc, the original string "sample" will no longer be referenced and hence eligible for gc.
Hope that helps.
------------------
Jane Griscti
Sun Certified Programmer for the Java� 2 Platform
 
Asma Zafar
Ranch Hand
Posts: 49
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
But the question should have been, at what line the object created at line 5 becomes available for garbage collection, instead of when anObj is available for garbage collection, for that the answer should be line 12.
 
Jane Griscti
Ranch Hand
Posts: 3141
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Asma,
You're right. The question is worded poorly. 'anObj' is a reference variable not an object, so it would never be eligible for gc. The String object "Sample" would be available for gc at line 10.
------------------
Jane Griscti
Sun Certified Programmer for the Java� 2 Platform
 
yaeger rosenberg
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
if the String had been "A123" then toUpperCase() will not return a new reference (since the original reference is returned for cases in which the uppercase string is identical to the original), and the original String would not be eligible for gc?
And what is the rule about gc of String literals? Is there any difference in the language specs in regard to String literal gc and other object gc?
 
Jane Griscti
Ranch Hand
Posts: 3141
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Yaeger,
Your comment on <code>"A123".toUpperCase()</code> is correct. If any of the String methods can be satisfied by the existing String, then a reference to the original String object is returned.
The JVM specifications do not require the gc of string literals; however, many of the existing mocks use them in their gc questions, so when answering, assume they are gc'd.
The real exam only tests you on system independant aspects of the language i.e. you won't see any questions in which it is necessary to know what underlying os is being used.
Hope that helps.
------------------
Jane Griscti
Sun Certified Programmer for the Java� 2 Platform
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic