classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: String class: hack for ORP 1.0.9


From: David P Grove
Subject: Re: String class: hack for ORP 1.0.9
Date: Tue, 12 Jul 2005 08:06:15 -0400

So, I'm having a hard time seeing how this "optimization" actually makes 
the code faster under any reasonable assumptions of what an optimizing JIT 
is going to do.  It seems mostly harmless to have it (although it makes 
the method larger, and thus a slightly less attractive candidate for 
inlining), but if it actually buys you any measurable speedup on a "high 
performance" VM, then you should really take a hard look at your VM/JIT 
and find out why they didn't do a good job on the "unoptimized" version in 
the first place.  clone() on an array is just a short hand for a new 
followed by an arraycopy, and the new followed by arraycopy idiom shows up 
all over the place so you need to do a good job on it.

--dave

address@hidden wrote on 07/12/2005 04:54:01 
AM:

> On Tue, 2005-07-12 at 13:02 +1200, Simon Kitching wrote:
> > I just wondered if it was time to remove this hack...
> 
> Wow, that is a very old workaround. And indeed a nice optimization to
> have. A quick startup of eclipse (with just a little project) shows 4642
> hits of String.toCharArray() of which 4200 have (count == value.length).
> Thanks for finding this.
> 
> Committed as:
> 
>        Reported by Simon Kitching <address@hidden>
>        * java/lang/String.java (toCharArray): Return value.clone() when
>        count == value.length.
> 
> Cheers,
> 
> Mark
> 
> diff -u -r1.67 String.java
> --- java/lang/String.java       11 Jul 2005 22:30:07 -0000      1.67
> +++ java/lang/String.java       12 Jul 2005 08:48:23 -0000
> @@ -1499,10 +1499,9 @@
>     */
>    public char[] toCharArray()
>    {
> -    // XXX ORP 1.0.9 crashes on (char[]) clone() during bootstrap, so 
we
> -    // omit this optimization for now.
> -    // if (count == value.length)
> -    //   return (char[]) value.clone();
> +    if (count == value.length)
> +      return (char[]) value.clone();
> +
>      char[] copy = new char[count];
>      VMSystem.arraycopy(value, offset, copy, 0, count);
>      return copy;
> 
> [attachment "signature.asc" deleted by David P Grove/Watson/IBM] 
> _______________________________________________
> Classpath mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/classpath





reply via email to

[Prev in Thread] Current Thread [Next in Thread]