| Author | Topic: Mughal rasmussen | 
| Mahen greenhorn | posted February 21, 2000 09:07 PM Which is the earliest line in the following code after which the object created on the line marked (0) will be a candidate for being garbage collected, assuming no compiler optimizations are done? public class Q76a9 { 
 
 | 
| Umesh ranch hand | posted February 21, 2000 10:07 PM After line marked 2. Till line 2, b has ref. to 'bye'. At that line 'bye' lost the ref. to b and hence eligible for GC. Am I right ?. 
 | 
| Hood unregistered | posted February 21, 2000 11:14 PM The object "bye" will be garbage collected after //3. This is because after the statement "String d = b;" both d and b are refering to the same object that is "bye". So after //2 b will be refering to "hello" but d will still be refering to "bye". After //3 there will be no reference to "bye" hence it will be ready for garbage collection. 
 | 
| shan unregistered | posted February 22, 2000 08:16 AM It is string literal and so never Gced 
 | 
| akhil unregistered | posted February 22, 2000 01:32 PM How about 'c'? 'C' is still holding reference for 'bye'. I think the object will be garbage collected only after line marked 4. 
 | 
| Jim Yingst sheriff | posted February 22, 2000 02:39 PM akhil- No, c is holding a separate String, "bye!". It was created by copying characters from the original "bye" and adding "!", but now it's a completely separate String, and has no link to the original "bye". shan- correct, since it's a String literal, it won't ever be garbage collected. That's a subtle point that isn't on the exam, but it's good to know anyway. If the object were not a String literal, then it would be eligible for collection after line 3, as Hood says. 
 | 
| Hood unregistered | posted February 23, 2000 01:37 AM Thanks Jim, when we create a string using a literal it creates a String object and we can apply all the methods of a String class on it (like "hood".equals("hood") is a valid statement) so I thought it would behave as a normal object during garbage collection also. But it seems Garbage collection takes care of objects created by the "new" operator only. 
 | 
| Jim Yingst sheriff | posted February 23, 2000 11:05 AM Hood- not exactly. There are numerous ways to create an object without "new" - at least, without a "new" in any code that you write or see - and garbace collection works normally for all of them, except for string literals. Examples: 
 [This message has been edited by Jim Yingst (edited February 23, 2000).] 
 | 
| maha anna bartender | posted February 23, 2000 12:52 PM one small correction.But I understand your point. String e =(String) a.clone();           // the clone() method inherited from Object returns an Object. We have to cast to the corrs. type. [This message has been edited by maha anna (edited February 23, 2000).] 
 | 
| Jim Yingst sheriff | posted February 23, 2000 01:25 PM Good call. Thanks. 
 | 
| 
 | | |