Hello!

Prior to Java5, StringBuffer used to be able to share its internal char[] buffer with the String, returned with toString(). With introducing of the new StringBuilder class this functionality was removed.

It seems tempting to reintroduce this feature now in AbstractStringBuilder.
The rationale here is that StringBuilder already provides a way of accepting the hint about the result's size. The constructor with the explicitly specified capacity is used for increasing the efficiency of strings concatenations. Optimizing this case by avoiding additional memory allocation and copying looks sensible to me.

Here's the draft webrev
http://cr.openjdk.java.net/~igerasim/XXXXXXX-ASB-shared-value/00/webrev/

This variant showed a significant speed improvement for the cases, when the the capacity is equal to the result's size (up to +25% to throughput). For the other cases, the difference isn't very clear based on my benchmarks :) But is seems to be small enough, as it only adds a few comparisons, coupled with already relatively heavy operations, like allocation and copying.

Here's the benchmark that I've used:
http://cr.openjdk.java.net/~igerasim/XXXXXXX-ASB-shared-value/MyBenchmark.java

And the corresponding graphs.
http://cr.openjdk.java.net/~igerasim/XXXXXXX-ASB-shared-value/ASB-Shared-bench-test15.png
http://cr.openjdk.java.net/~igerasim/XXXXXXX-ASB-shared-value/ASB-Shared-bench-test17.png
The blue line here stands for the baseline throughput.

If people agree, this is a useful addition, a test should also be added, of course.

Sincerely yours,
Ivan

Reply via email to