RFR: 8330465: Stable Values and Collections (Internal) [v16]
Per Minborg
pminborg at openjdk.org
Thu May 16 12:48:24 UTC 2024
> # Stable Values & Collections (Internal)
>
> ## Summary
> This PR proposes to introduce an internal _Stable Values & Collections_ API, which provides immutable value holders where elements are initialized _at most once_. Stable Values & Collections offer the performance and safety benefits of final fields while offering greater flexibility as to the timing of initialization.
>
> ## Goals
> * Provide an easy and intuitive API to describe value holders that can change at most once.
> * Decouple declaration from initialization without significant footprint or performance penalties.
> * Reduce the amount of static initializer and/or field initialization code.
> * Uphold integrity and consistency, even in a multi-threaded environment.
>
> For more details, see the draft JEP: https://openjdk.org/jeps/8312611
>
> ## Performance
> Performance compared to instance variables using two `AtomicReference` and two protected by double-checked locking under concurrent access by all threads:
>
>
> Benchmark Mode Cnt Score Error Units
> StableBenchmark.atomic thrpt 10 259.478 ? 36.809 ops/us
> StableBenchmark.dcl thrpt 10 225.710 ? 26.638 ops/us
> StableBenchmark.stable thrpt 10 4382.478 ? 1151.472 ops/us <- StableValue significantly faster
>
>
> Performance compared to static variables protected by `AtomicReference`, class-holder idiom holder, and double-checked locking (all threads):
>
>
> Benchmark Mode Cnt Score Error Units
> StableStaticBenchmark.atomic thrpt 10 6487.835 ? 385.639 ops/us
> StableStaticBenchmark.dcl thrpt 10 6605.239 ? 210.610 ops/us
> StableStaticBenchmark.stable thrpt 10 14338.239 ? 1426.874 ops/us
> StableStaticBenchmark.staticCHI thrpt 10 13780.341 ? 1839.651 ops/us
>
>
> Performance for stable lists (thread safe) in both instance and static contexts whereby we access a single value compared to `ArrayList` instances (which are not thread-safe) (all threads):
>
>
> Benchmark Mode Cnt Score Error Units
> StableListElementBenchmark.instanceArrayList thrpt 10 5812.992 ? 1169.730 ops/us
> StableListElementBenchmark.instanceList thrpt 10 4818.643 ? 704.893 ops/us
> StableListElementBenchmark.staticArrayList thrpt 10 7614.741 ? 564.777 ops/us
> StableListElementBe...
Per Minborg has updated the pull request incrementally with one additional commit since the last revision:
Fix copyringht issues
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/18794/files
- new: https://git.openjdk.org/jdk/pull/18794/files/2af0168e..ec7c92cd
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=18794&range=15
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=18794&range=14-15
Stats: 206 lines in 13 files changed: 200 ins; 1 del; 5 mod
Patch: https://git.openjdk.org/jdk/pull/18794.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/18794/head:pull/18794
PR: https://git.openjdk.org/jdk/pull/18794
More information about the hotspot-compiler-dev
mailing list