Problem with StringBuffer

Archie Cobbs archie at whistle.com
Sat Apr 1 10:01:26 PST 2000


Wolfgang Muees writes:
> > I finally found out the reason for 'memory leak' on my Java program,
> > and the culprit in this case was StringBuffer - implementation.
> > 
> > I have a lexer (made with JFLex), that uses StringBuffer for
> > constructing
> > the strings for certain tokens. The StringBuffer is reused so that each
> > time a new such token is getting creted, StringBuffer.setLength(0) is
> > called. However, in Kaffe's implementation at least, the actual length
> > of the buffer is not changed. This wouldn't be a big problem in itself,
> > as there's just one StringBuffer instance... But, alas, as Strings &
> > StringBuffers are optimized so that when new String(StringBuffer) is
> > called, the character array is actually shared between the string
> > and string buffer, until the StringBuffer needs to change the data
> > (or length of the buffer via setLength()). The problem here is that
> > as soon as I encounter a long token (~4000 chars in this case),
> > _all_ tokens after that will use up the same 4k memory
> 
> The right solution for this problem is IMO: don't reuse StringBuffer.
> It is designed primary as an input buffer for a single string.

Yesterday I checked in some changes which should alleviate this
problem nonetheless.. please give them a try and let us know if
they help.

-Archie

___________________________________________________________________________
Archie Cobbs   *   Whistle Communications, Inc.  *   http://www.whistle.com


More information about the kaffe mailing list