Patch: RFC: String sharing heuristic

Bryce McKinlay mckinlay@redhat.com
Thu May 12 18:59:00 GMT 2005


I think this patch makes sense. In fact I suspect that its very common 
for the original string to be thrown out when substring() is used, so 
perhaps we could make the threshold even more conservative, eg (2 * 
newCount) ?

Bryce


Tom Tromey wrote:

>Please comment on this.
>
>Christopher Lansdown  showed me  an example program  that unexpectedly
>used  a lot of  memory (as  compared to  running on  jamvm).  Analysis
>showed that  he was  using substring(), which  was keeping  the entire
>contents  of  his 300M  log  file live  --  whereas  the heuristic  in
>Classpath's substring() avoided this.
>
>This is obviously an extreme example.  I'm inclined to put this patch
>in, but I was hoping someone out there had a better argument for or
>against than "this one program benefited".  Obviously any heuristic
>here can't please everyone...
>
>Tom
>
>Index: ChangeLog
>from  Tom Tromey  <tromey@redhat.com>
>
>	* java/lang/natString.cc (substring): Changed sharing heuristic.
>
>Index: java/lang/natString.cc
>===================================================================
>RCS file: /cvs/gcc/gcc/libjava/java/lang/natString.cc,v
>retrieving revision 1.37
>diff -u -r1.37 natString.cc
>--- java/lang/natString.cc 22 Apr 2005 19:02:41 -0000 1.37
>+++ java/lang/natString.cc 11 May 2005 21:00:41 -0000
>@@ -1,6 +1,6 @@
> // natString.cc - Implementation of java.lang.String native methods.
> 
>-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004  Free Software Foundation
>+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005  Free Software Foundation
> 
>    This file is part of libgcj.
> 
>@@ -829,7 +829,7 @@
>   if (beginIndex == 0 && endIndex == count)
>     return this;
>   jint newCount = endIndex - beginIndex;
>-  if (newCount <= 8)  // Optimization, mainly for GC.
>+  if (newCount <= 8  || (4 * newCount) < count)	// Optimization, mainly for GC.
>     return JvNewString(JvGetStringChars(this) + beginIndex, newCount);
>   jstring s = new String();
>   s->data = data;
>  
>



More information about the Java-patches mailing list