> -----Original Message-----
> From: Robert Lougher [mailto:[EMAIL PROTECTED]
> Sent: Saturday, July 29, 2006 5:28 AM
> To: harmony-dev@incubator.apache.org
> Subject: Re: Re: [drlvm] string interning in java
> 
> On 7/29/06, Nathan Beyer <[EMAIL PROTECTED]> wrote:
> >
> >
> > > -----Original Message-----
> > > From: Robert Lougher [mailto:[EMAIL PROTECTED]
> > > Sent: Friday, July 28, 2006 7:40 PM
> > > To: harmony-dev@incubator.apache.org
> > > Subject: Re: Re: [drlvm] string interning in java
> > >
> > > Hi,
> > >
> > > On 7/29/06, Alex Blewitt <[EMAIL PROTECTED]> wrote:
> > > > On 28/07/06, Salikh Zakirov <[EMAIL PROTECTED]> wrote:
> > > The interned String table should be garbage-collected.  If the only
> > > reference to an interned String is from the class constant pool it
> > > will be collected when the class is unloaded.  If the intern table is
> > > preventing Strings from being collected it's a bug in the VM!
> >
> > Can the String from a class constant pool be collected if the class is
> still
> > in use? I'm assuming it can't, so the above is an incomplete response to
> > Alex's points, as I imagine it's very possible to have many Strings in
> > constant pools that are never or rarely used, but the class objects are
> used
> > quite frequently and would never get collected. For example, the Strings
> > used in exceptions that rarely, if every get called in some classes.
> >
> 
> It wasn't meant to be a complete response.  I was responding to the
> following point:

I meant that your response to that point was incomplete and I still believe
it is.

> 
> > > > Furthermore, because it's a
> > > > dynamically read in string, it doesn't pollute the intern() pool,
> and
> > > > thus when the class is unloaded, the string is unloaded too. Once a
> > > > String is intern()'d, it's like a memory leak -- you'll never see
> that
> > > > memory again.
> 
> Which implies that freeing of the dynamically loaded string when the
> class is unloaded is something special.  It is not.  Nor is an
> interned string a memory leak.  It will be collected when there are no
> more references to it like any other object.
> 
> Rob.

This assumes that Classes will frequently get unloaded, which I don't
believe is the case, especially classes that are part of the core JRE
libraries.

Any String that's been placed into the constant pool of a Class couldn't be
collected until that Class is collected, correct? And all of the Strings in
the constant pool are taking up memory, correct? So, if you have a class and
the only Strings in the constant pool are those that represent exception
messages or keys to exception messages and those exceptions rarely get
executed, but the Class is frequently used (keeping it from being
collected), then you'd, theoretically, be wasting memory, correct?

-Nathan



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to