RFR: 8332842: Optimize empty CopyOnWriteArrayList allocations [v4]
duke
duke at openjdk.org
Wed Aug 14 14:08:53 UTC 2024
On Thu, 20 Jun 2024 19:17:25 GMT, jengebr <duke at openjdk.org> wrote:
>> Improve `java/util/concurrent/CopyOnWriteArrayList` by eliminating needless cloning of Object[0] instances. This cloning is intended to prevent callers from changing array contents, but many `CopyOnWriteArrayList`s are allocated to size zero, or are otherwise maintained empty, so cloning is unnecessary.
>>
>> Results from the included JMH benchmark:
>> Before:
>>
>> Benchmark Mode Cnt Score Error Units
>> CopyOnWriteArrayListBenchmark.clear avgt 5 74.487 ± 1.793 ns/op
>> CopyOnWriteArrayListBenchmark.clearEmpty avgt 5 27.918 ± 0.759 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceArray avgt 5 16.656 ± 0.375 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceArrayEmpty avgt 5 15.415 ± 0.489 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceCollection avgt 5 21.608 ± 0.363 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceCollectionEmpty avgt 5 15.374 ± 0.260 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceDefault avgt 5 15.688 ± 0.350 ns/op
>> CopyOnWriteArrayListBenchmark.readInstance avgt 10 2625.125 ± 71.802 ns/op
>> CopyOnWriteArrayListBenchmark.readInstanceEmpty avgt 10 2607.447 ± 46.400 ns/op
>>
>>
>> After:
>>
>> Benchmark Mode Cnt Score Error Units
>> CopyOnWriteArrayListBenchmark.clear avgt 5 75.365 ± 2.092 ns/op
>> CopyOnWriteArrayListBenchmark.clearEmpty avgt 5 20.803 ± 0.539 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceArray avgt 5 16.808 ± 0.582 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceArrayEmpty avgt 5 12.980 ± 0.418 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceCollection avgt 5 21.627 ± 0.173 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceCollectionEmpty avgt 5 12.864 ± 0.408 ns/op
>> CopyOnWriteArrayListBenchmark.createInstanceDefault avgt 5 12.931 ± 0.255 ns/op
>> CopyOnWriteArrayListBenchmark.readInstance avgt 10 2615.500 ± 30.771 ns/op
>> CopyOnWriteArrayListBenchmark.readInstanceEmpty avgt 10 2583.892 ± 62.086 ns/op
>
> jengebr has updated the pull request incrementally with one additional commit since the last revision:
>
> Expanding coverage of remove()
@jengebr
Your change (at version 2ff93ab6f752ad285411d635c7755e9f47a571b2) is now ready to be sponsored by a Committer.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/19527#issuecomment-2288866419
More information about the core-libs-dev
mailing list