aspose file tools*
The moose likes Beginning Java and the fly likes How many Objects are garbage collected? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "How many Objects are garbage collected?" Watch "How many Objects are garbage collected?" New topic
Author

How many Objects are garbage collected?

Thomas Markl
Ranch Hand

Joined: Mar 08, 2001
Posts: 192
String s1=new String(" 5 + 5 = 10 ");
s1.trim();
s1.replace('+', '-');
How many objects are created and g.c'd?
I think because of String immutablility the
string object s1 is not changed but for each
operation a new String object is temporarily created.
So I think 3 objects are created and g.c'd.
Ok?
Jon Strayer
Ranch Hand

Joined: Dec 04, 2002
Posts: 133
Originally posted by Thomas Markl:
String s1=new String(" 5 + 5 = 10 ");
s1.trim();
s1.replace('+', '-');
How many objects are created and g.c'd?
I think because of String immutablility the
string object s1 is not changed but for each
operation a new String object is temporarily created.
So I think 3 objects are created and g.c'd.
Ok?


I get 4. I believe the string constant " 5 + 5 = 10 " is made into a String object before it is passed to the constructor.


Jon
Jamie Robertson
Ranch Hand

Joined: Jul 09, 2001
Posts: 1879

I wouldn't think this is always the case. I would think String pools may skew that result ( if the methods trim() and replace() can return Strings from the String pool ).
Consider:

If the trim() and replace() methods return Strings from the String pool, then it could possibly only have ever created one String("5 + 5 = 10") for the duration of the program. So only one String may be gc'd in your program, depending on the values of the String. If you don't know about String pools, then you can search the forums, or the net or maybe someone else will take the time to explain. Anyways, your answer may, or may not be right for Strings objects. Also, there are more objects used underneath the covers that may also need to be gc'd, like the underlying char[]'s and whatever other objects are used under the covers.
Jamie
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
The String literal used in the constructor will be part of the constant String pool and therefore never be gc'ed.
The trim and replace methods certainly will create new Strings, as searching for equal Strings in the constant pool (ala intern()) just is to costly do be a reasonable thing to do.
Jamie is right, though, that there probably other objects are created and gc'ed under the hood. So without intimate detail on the implementation, you simply can't give a reasonable answer. (You could even argue that none of the objects might get gc'ed, as the program might terminate beforehand...)


The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
 
jQuery in Action, 2nd edition
 
subject: How many Objects are garbage collected?