RFR: 8360884: Better scoped values [v3]

ExE Boss duke at openjdk.org
Tue Jul 1 09:07:43 UTC 2025


On Tue, 1 Jul 2025 08:21:10 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> src/java.base/share/classes/java/lang/ScopedValue.java line 802:
>> 
>>> 800:                         return x;
>>> 801:                     }
>>> 802:                 };
>> 
>> There's something a bit uncomfortable about initializing hashGenerator in ScopedValue's class initializer, then changing it in Constants class initializer. Iimmediately clear what the memory model issues. It doesn't of course matter if the stale value is used but I think confusing on first sight.
>> 
>> Have you tried dropping the initializer from ScopedValue so it hashGenerator is only set by Constants? The ScopedValue constructor can call generateKey if hashGenerator is null, and hashGenerator can become a stable field.
>
>> There's something a bit uncomfortable about initializing hashGenerator in ScopedValue's class initializer, then changing it in Constants class initializer. Iimmediately clear what the memory model issues. It doesn't of course matter if the stale value is used but I think confusing on first sight.
> 
> That's fair. I think it's a benign race, but I guess that's still a race.
> 
>> Have you tried dropping the initializer from ScopedValue so it hashGenerator is only set by Constants? The ScopedValue constructor can call generateKey if hashGenerator is null, and hashGenerator can become a stable field.
> 
> That would be more explicit.

> > Have you tried dropping the initializer from ScopedValue so hashGenerator is only set by Constants? The ScopedValue constructor can call generateKey if hashGenerator is null, and hashGenerator can become a stable field.
> 
> That would be more explicit.

A stable field would also be constant foldable.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26019#discussion_r2176927586


More information about the core-libs-dev mailing list