Hi Roger!

On 4/1/19 8:06 AM, Roger Riggs wrote:
Hi Ivan,

Thanks for running the micro benchmarks.

This version has more code duplication than Andrew's original
proposal that calculated the coder only CharSequence and had
a single AbstractStringBuilder constructor for computing the size
and allocating the byte[]/

http://cr.openjdk.java.net/~aleonard/8221430/webrev.00/

I'd be curious to know the JMH tests for that version compared.

That variant appeared to be slightly slower, comparing to the latest variant:

Here are fresh benchmarks for both variants

(1) cr.openjdk.java.net/~aleonard/8221430/webrev.00 :
Benchmark                               Mode  Cnt   Score Error  Units
StringBuilders.fromLatin1String         avgt   18  15.217 ± 0.157  ns/op
StringBuilders.fromLatin1StringBuilder  avgt   18  19.169 ± 0.086  ns/op
StringBuilders.fromUtf16String          avgt   18  17.593 ± 0.180  ns/op
StringBuilders.fromUtf16StringBuilder   avgt   18  21.786 ± 0.158  ns/op

(2) cr.openjdk.java.net/~igerasim/8221430/02/webrev :
Benchmark                               Mode  Cnt   Score Error  Units
StringBuilders.fromLatin1String         avgt   18  14.655 ± 0.133  ns/op
StringBuilders.fromLatin1StringBuilder  avgt   18  18.059 ± 0.161  ns/op
StringBuilders.fromUtf16String          avgt   18  16.675 ± 0.124  ns/op
StringBuilders.fromUtf16StringBuilder   avgt   18  20.761 ± 0.116  ns/op

One reason might be that (2) avoids a redundant check for negative length of the String argument.

Another comment is whether the 'instanceof' code is the
best performer for checking if the argument is a String.
I might think that 'seq.getClass().equals(String.class)' is faster.

Interesting.  I don't see examples of such pattern in JDK.
Anyhow, I think that the case when a StringBuilder is constructed from a String down-cast to CharSequence should be rare in practice, so it is sensible to keep the code more ideomatic, i.e. use instanceof.

And in this most recent webrev that has separated the AbstractStringBuilder constructors for String from CharSequence, is it more likely that the argument will be an AbstractStringBuilder than a String so that comparison should be done first.

Yes, it's a good point!  I reordered the branches in the latest webrev.

With kind regards,
Ivan

Reply via email to