RFR: 8351565: Implement JEP 502: Stable Values (Preview)

Per Minborg pminborg at openjdk.org
Thu Mar 13 11:20:14 UTC 2025


On Tue, 11 Mar 2025 16:15:10 GMT, Quan Anh Mai <qamai at openjdk.org> wrote:

>> Can you please elaborate a bit more on your proposal @merykitty?
>
> If you have an `@Stable Object[]`, then the elements are also considered `@Stable`. Then you can do something like:
> 
>     ReentrantLock[] locks;
> 
>     T get(int idx) {
>         Object x = backing[idx];
>         if (x == null) {
>             return compute(idx);
>         }
>         return unwrap(x);
>     }
> 
>     T compute(int idx) {
>         ReentrantLock lock = locks[idx];
>         lock.lock();
>         try {
>             Object x = backing[idx];
>             if (x != null) {
>                 return unwrap(x);
>             }
>             T obj = ...;
>             backing[idx] = wrap(obj);
>             return obj;
>         } finally {
>             lock.unlock();
>         }
>     }

What would be the difference between `@Stable StableValueImpl<E>[] backing` and `@Stable Object[] backing`?

>> Yes we can. However, I am uncertain if the added complexity can motivate any performance benefits. Perhaps on ARM? I can do a benchmark on it.
>
> You can probably use `acquire` only for the first `get` as it is in the fast path. For other I guess `volatile` is fine.

Yeah. Maybe that could strike a balance.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/23972#discussion_r1990908235
PR Review Comment: https://git.openjdk.org/jdk/pull/23972#discussion_r1991599680


More information about the core-libs-dev mailing list