On Fri, 17 Feb 2023 09:58:54 GMT, Claes Redestad <redes...@openjdk.org> wrote:

> During work on #12453 @schlosna reported that `array.clone()` might 
> underperform `System.arraycopy` in microbenchmarks and I opted to go with 
> `arraycopy` throughout while investigating.
> 
> Testing on x86 (SandyBridge, AVX2) I observe no difference at all between the 
> setups. On aarch the only difference I can observe is that arraycopy seem 
> curiously slow for input size = 0, otherwise no statistically significant 
> difference. All tests ran on builds from JDK mainline and 21-b9.
> 
> Since the reported difference was small and mostly visible on very large 
> arrays I conclude that the maintainability win we get from using `clone()` is 
> preferable. I've added the microbenchmark provided by @schlosna here.

osx-aarch64:

Benchmark                 (size)  Mode  Cnt    Score   Error  Units
ArrayClone.byteArraycopy       0  avgt   15    9,517 ± 1,272  ns/op
ArrayClone.byteArraycopy      10  avgt   15    5,933 ± 0,314  ns/op
ArrayClone.byteArraycopy     100  avgt   15    4,802 ± 0,234  ns/op
ArrayClone.byteArraycopy    1000  avgt   15   24,671 ± 0,437  ns/op
ArrayClone.byteClone           0  avgt   15    2,417 ± 0,016  ns/op
ArrayClone.byteClone          10  avgt   15    2,924 ± 0,027  ns/op
ArrayClone.byteClone         100  avgt   15    4,563 ± 0,050  ns/op
ArrayClone.byteClone        1000  avgt   15   24,737 ± 0,262  ns/op
ArrayClone.intArraycopy        0  avgt   15    8,156 ± 2,148  ns/op
ArrayClone.intArraycopy       10  avgt   15    3,646 ± 0,025  ns/op
ArrayClone.intArraycopy      100  avgt   15   11,430 ± 0,087  ns/op
ArrayClone.intArraycopy     1000  avgt   15  106,174 ± 0,721  ns/op
ArrayClone.intClone            0  avgt   15    2,455 ± 0,159  ns/op
ArrayClone.intClone           10  avgt   15    3,621 ± 0,013  ns/op
ArrayClone.intClone          100  avgt   15   11,648 ± 0,454  ns/op
ArrayClone.intClone         1000  avgt   15  106,469 ± 1,295  ns/op


linux-x64, sandybridge, avx2:

Benchmark                 (size)  Mode  Cnt    Score    Error  Units
ArrayClone.byteArraycopy       0  avgt   15    3.321 ±  0.194  ns/op
ArrayClone.byteArraycopy      10  avgt   15    6.953 ±  0.329  ns/op
ArrayClone.byteArraycopy     100  avgt   15   13.490 ±  0.595  ns/op
ArrayClone.byteArraycopy    1000  avgt   15  150.201 ±  3.451  ns/op
ArrayClone.byteClone           0  avgt   15    5.431 ±  0.252  ns/op
ArrayClone.byteClone          10  avgt   15    6.370 ±  0.329  ns/op
ArrayClone.byteClone         100  avgt   15   13.561 ±  0.633  ns/op
ArrayClone.byteClone        1000  avgt   15  150.300 ±  5.318  ns/op
ArrayClone.intArraycopy        0  avgt   15    3.297 ±  0.226  ns/op
ArrayClone.intArraycopy       10  avgt   15    7.171 ±  0.354  ns/op
ArrayClone.intArraycopy      100  avgt   15   60.863 ±  1.580  ns/op
ArrayClone.intArraycopy     1000  avgt   15  557.770 ± 15.107  ns/op
ArrayClone.intClone            0  avgt   15    5.373 ±  0.225  ns/op
ArrayClone.intClone           10  avgt   15    6.965 ±  0.293  ns/op
ArrayClone.intClone          100  avgt   15   61.696 ±  1.983  ns/op
ArrayClone.intClone         1000  avgt   15  552.809 ± 14.358  ns/op

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

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

Reply via email to