RFR [S] 8077242: (str) Optimize AbstractStringBuilder.append(CharSequence, int, int) for String argument
Ivan Gerasimov
ivan.gerasimov at oracle.com
Wed Jul 1 21:18:33 UTC 2015
Thank you Martin for review!
On 01.07.2015 0:59, Martin Buchholz wrote:
> This looks good.
>
> Because we already have append(String) it *may* be a good idea to add
> append(String, int, int).
>
I found only a dozen of the places in JDK where this method is
applicable, so I thought it doesn't seem to worth a change in the API.
> See also my failure to add getChars to CharSequence itself.
> If we (you?) could make that happen, that would eliminate the need for
> instanceof String etc.
>
Yes, it was my initial thought too:
http://mail.openjdk.java.net/pipermail/core-libs-dev/2015-May/033285.html
I guess, it's not a problem to add default CharSequence.getChars(). The
problem is to call it safely.
If there were a way to enforce all the derived classes except a few
trusted stick to the default implementation, it would be possible to use
getChars in sb.append().
For now, I limited the scope of the change, so that changing
sb.append(str.substring(a, b)) to sb.append(str, a, b) will be at least
no slower.
Sincerely yours,
Ivan
> On Sat, Jun 27, 2015 at 7:23 AM, Ivan Gerasimov
> <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote:
>
> Hello!
>
> AbstractStringBuilder, which is base for StringBuilder and
> StringBuffer has a method for appending a sub-sequence of a
> CharSequence.
> Internally, it copies one char at a time in a loop, picking them
> up with CharSequence.charAt() method.
> For the case when the argument is a String, it can be done more
> efficiently, by a call to String.getChars().
> Since String is a final class, it should be safe to pass 'value'
> to its method.
>
> I've also found a few places in JDK where code can be done more
> efficient, using this optimization.
>
> Would you please help review this fix?
>
> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8077242
> WEBREV: http://cr.openjdk.java.net/~igerasim/8077242/02/webrev/
> <http://cr.openjdk.java.net/%7Eigerasim/8077242/02/webrev/>
>
> Sincerely yours,
> Ivan
>
>
More information about the core-libs-dev
mailing list