> 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() ------------- Changes: - all: https://git.openjdk.org/jdk/pull/19527/files - new: https://git.openjdk.org/jdk/pull/19527/files/b1920f7a..2ff93ab6 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=19527&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=19527&range=02-03 Stats: 35 lines in 2 files changed: 35 ins; 0 del; 0 mod Patch: https://git.openjdk.org/jdk/pull/19527.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/19527/head:pull/19527 PR: https://git.openjdk.org/jdk/pull/19527