On Sat, 28 Nov 2020 22:05:01 GMT, Сергей Цыпанов 
<github.com+10835776+stsypa...@openjdk.org> wrote:

>>> @cl4es Could you tell me where I can look for a command to run the 
>>> benchmark?
>> 
>> See 
>> [doc/testing.md](https://github.com/openjdk/jdk/blob/master/doc/testing.md). 
>> The 
>> [configuration](https://github.com/openjdk/jdk/blob/master/doc/testing.md#configuration)
>>  section has a pointer on how to set up and configure the JDK build with 
>> JMH, then it should be a simple matter of running `make test 
>> TEST=micro:org.openjdk.bench.java.lang.StringConcat`.
>
> Here are the results, looks like we have no regression:
> Benchmark                               (intValue)  Mode  Cnt         
> original           patched  Units  Units
> StringConcat.concat4String                    4711  avgt   15   27.267 ± 
> 1.231    29.938 ± 1.099  ns/op  ns/op
> StringConcat.concat6String                    4711  avgt   15   39.185 ± 
> 1.604    42.759 ± 2.564  ns/op  ns/op
> StringConcat.concatConst2String               4711  avgt   15   22.345 ± 
> 1.685    21.913 ± 1.716  ns/op  ns/op
> StringConcat.concatConst4String               4711  avgt   15   32.318 ± 
> 4.073    32.847 ± 1.082  ns/op  ns/op
> StringConcat.concatConst6Object               4711  avgt   15    9.227 ± 
> 0.146     9.999 ± 0.939  ns/op  ns/op
> StringConcat.concatConst6String               4711  avgt   15   46.134 ± 
> 2.729    44.903 ± 1.960  ns/op  ns/op
> StringConcat.concatConstBoolByte              4711  avgt   15   13.117 ± 
> 0.725    12.575 ± 0.380  ns/op  ns/op
> StringConcat.concatConstInt                   4711  avgt   15   12.230 ± 
> 0.653    11.890 ± 0.556  ns/op  ns/op
> StringConcat.concatConstIntConstInt           4711  avgt   15   18.152 ± 
> 1.317    17.722 ± 0.566  ns/op  ns/op
> StringConcat.concatConstString                4711  avgt   15   12.644 ± 
> 0.656    13.424 ± 1.400  ns/op  ns/op
> StringConcat.concatConstStringConstInt        4711  avgt   15   20.836 ± 
> 0.703    19.975 ± 0.821  ns/op  ns/op
> StringConcat.concatEmptyConstInt              4711  avgt   15   10.604 ± 
> 0.443    10.229 ± 0.219  ns/op  ns/op
> StringConcat.concatEmptyConstString           4711  avgt   15    4.844 ± 
> 0.174     4.721 ± 0.147  ns/op  ns/op
> StringConcat.concatEmptyLeft                  4711  avgt   15    5.386 ± 
> 0.190     5.314 ± 0.104  ns/op  ns/op
> StringConcat.concatEmptyRight                 4711  avgt   15    5.352 ± 
> 0.471     5.484 ± 0.354  ns/op  ns/op
> StringConcat.concatMethodConstString          4711  avgt   15   11.887 ± 
> 0.560    14.025 ± 1.522  ns/op  ns/op
> StringConcat.concatMix4String                 4711  avgt   15  172.425 ± 
> 6.868   169.658 ± 8.440  ns/op  ns/op

Right.

I won't insist but I think some of these could warrant some extra runs and 
analysis of the disassembly just to make sure. E.g. `concatMethodConstString` 
and `concat6String` has regression with just barely non-overlapping errors. If 
these regressions persist it could be due the small difference in the code path 
(one extra call depth for `getBytes(byte[], int, byte)`) causing some 
difference in compilation order, inlining decision or otherwise. 

If the regression is real, the paranoid workaround would be to restore 
`String.getBytes(byte[], int, byte)` and not use delegation. A tiny bit of code 
duplication might be preferable to a surprise regression in code that has seen 
a lot of tuning work..

-------------

PR: https://git.openjdk.java.net/jdk/pull/402

Reply via email to