> # 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 two additional commits since the last revision: - Add comment on security precaution - Share code paths ------------- Changes: - all: https://git.openjdk.org/jdk/pull/18794/files - new: https://git.openjdk.org/jdk/pull/18794/files/d8875db7..058cfddf Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=18794&range=08 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=18794&range=07-08 Stats: 55 lines in 1 file changed: 1 ins; 53 del; 1 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