RFR: 8301958: Reduce Arrays.copyOf/-Range overheads [v7]

Francesco Nigro duke at openjdk.org
Wed Feb 8 08:18:52 UTC 2023


On Wed, 8 Feb 2023 00:07:14 GMT, Claes Redestad <redestad at openjdk.org> wrote:

>> This patch adds special-cases to `Arrays.copyOf` and `Arrays.copyOfRange` to clone arrays when `newLength` or range inputs span the input array. This helps eliminate range checks and has been verified to help various String operations. Example:
>> 
>> Baseline
>> 
>> Benchmark                                            (size)  Mode  Cnt   Score   Error  Units
>> StringConstructor.newStringFromArray                      7  avgt   15  16.817 ± 0.369  ns/op
>> StringConstructor.newStringFromArrayWithCharset           7  avgt   15  16.866 ± 0.449  ns/op
>> StringConstructor.newStringFromArrayWithCharsetName       7  avgt   15  22.198 ± 0.396  ns/op
>> 
>> Patch: 
>> 
>> Benchmark                                            (size)  Mode  Cnt   Score   Error  Units
>> StringConstructor.newStringFromArray                      7  avgt   15  14.666 ± 0.336  ns/op
>> StringConstructor.newStringFromArrayWithCharset           7  avgt   15  14.582 ± 0.288  ns/op
>> StringConstructor.newStringFromArrayWithCharsetName       7  avgt   15  20.339 ± 0.328  ns/op
>
> Claes Redestad has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Minimize, force inline, generalize

test/micro/org/openjdk/bench/java/lang/StringConstructor.java line 40:

> 38: 
> 39:   @Param({"0", "7", "64"})
> 40:   public int size;

I suggest to add the param `offset` for future experiment: together with `perfasm` it helps to check how different stubs are used and emulate the different branches of the optimized code

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

PR: https://git.openjdk.org/jdk/pull/12453


More information about the core-libs-dev mailing list