RFR: 8332842: Optimize empty CopyOnWriteArrayList allocations
jengebr
duke at openjdk.org
Mon Jun 3 19:03:15 UTC 2024
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
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
-------------
Commit messages:
- Fixing whitespace
- Removing toArray from benchmark
- Reverting change to clone()
- Merge branch 'openjdk:master' into CopyOnWriteArrayList_optimization
- Adding JMH benchmark
- Merge branch 'openjdk:master' into CopyOnWriteArrayList_optimization
- Merge branch 'openjdk:master' into CopyOnWriteArrayList_optimization
- Revert "Updating copyright yeaer"
- Merge branch 'openjdk:master' into CopyOnWriteArrayList_optimization
- Updating copyright yeaer
- ... and 2 more: https://git.openjdk.org/jdk/compare/9686e804...ea7a0042
Changes: https://git.openjdk.org/jdk/pull/19527/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19527&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8332842
Stats: 107 lines in 2 files changed: 104 ins; 0 del; 3 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
More information about the core-libs-dev
mailing list