See the bug for more discussion and reproducer. This PR replaces the linked list with an `ArrayList` wrapper that manages synchronization, search and replacements effectively. There are possible improvements here, most glaring is parallelism that is currently knee-capped by global synchronization. The synchronization scheme follows what we already have, and I think it is safer to continue with it right now.
I'll put performance data in a separate comment. Additional testing: - [x] Original reproducer improves drastically - [x] New microbenchmark shows no regression on "churning" tests, which covers insertion/removal perf - [x] New microbenchmark shows improvement on Full GC times (crude, but repeatable), serves as a proxy for reproducer - [x] `java/lang/ref` tests in release - [ ] `all` tests in fastdebug ------------- Commit messages: - Fix Changes: https://git.openjdk.org/jdk/pull/22043/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22043&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8343704 Stats: 275 lines in 4 files changed: 205 ins; 58 del; 12 mod Patch: https://git.openjdk.org/jdk/pull/22043.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/22043/head:pull/22043 PR: https://git.openjdk.org/jdk/pull/22043