Integrated: 8332842: Optimize empty CopyOnWriteArrayList allocations

jengebr duke at openjdk.org
Wed Aug 14 14:14:56 UTC 2024


On Mon, 3 Jun 2024 16:47:20 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

This pull request has now been integrated.

Changeset: a5d948fb
Author:    John Engebretson <jengebr at amazon.com>
Committer: Aleksey Shipilev <shade at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/a5d948fb9841f654cccc9567c60e8d28e7d719ae
Stats:     184 lines in 2 files changed: 180 ins; 0 del; 4 mod

8332842: Optimize empty CopyOnWriteArrayList allocations

Reviewed-by: shade, alanb

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

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


More information about the core-libs-dev mailing list