[kaffe] Re: Destroyed strings...

Patrick Tullmann tullmann@cs.utah.edu
Tue, 4 Jun 2002 22:28:28 -0600


Godmar wrote:
> Yes, don't do that.
> 
> It would mean you'd have to walk on egg shells when programming
> String and related classes in Java.

Of course...  And the current StringBuffer.toString() would have to be
completely tossed.


> Also, to unintern the string you don't have to access its content
> (or do you?)  Isn't that what Tim suggested?

Hmm... I can't see how that avoids the fundamental problem of a "live"
object with a pointer to dead space.

If I have a String sitting in the hashtable that is "dead", but not
yet removed, how is a random thread prevented from creating a new
String() with the same hashcode (and maybe the same contents) and
coming across this string-without-chararray object in the table?

I'd say this was totally and utterly broken, but it hasn't been the
pervasive problem I would except, so I must be missing something...

Perhaps the destroy() function on GC objects could be run while moving
white objects to the mustfree list in gc-incremental.c:finishGC?  That
would remove the Strings from the hashtable while the world is
stopped, thus preventing any mutators from seeing half-dead objects in
the string table.

-Pat

----- ----- ---- ---  ---  --   -    -      -         -               -
Pat Tullmann                                       tullmann@cs.utah.edu
	    He who dies with the most toys is still dead.