On Wed, 17 Apr 2024 15:17:52 GMT, Per Minborg <pminb...@openjdk.org> wrote:

>> Also, I want to mention a few important differences between `@Stable` and 
>> Stable Values:
>> 
>> Patterns:
>> 1. Benign race (does not exist in StableValue API): multiple threads can 
>> create an instance and upload, any non-null instance is functionally 
>> equivalent so race is ok (seen in most of JDK)
>> 2. compareAndSet (setIfUnset): multiple threads can create instance, only 
>> one will succeed in uploading; usually for when the instance computation is 
>> cheap but we want single witness.
>> 3. atomic computation (computeIfUnset): only one thread can create instance 
>> which will be witnessed by other threads; this pattern ensures correctness 
>> and prevents wasteful computation by other threads at the cost of locking 
>> and lambda creation.
>> 
>> Allocation in objects: `@Stable` field is local to an object but 
>> `StableValue` is another object; thus sharing strategy may differ, as stable 
>> fields are copied over but StableValue uses a shared cache (which is even 
>> better for avoiding redundant computation)
>> 
>> Question:
>> 1. Will we ever try to expose the stable benign race model to users?
>> 2. Will we ever try to inline the stable values in object layout like a 
>> stable field?
>
>> Question:
>> 
>> 1. Will we ever try to expose the stable benign race model to users?
>> 2. Will we ever try to inline the stable values in object layout like a 
>> stable field?
> 
> 1. I think there is little or no upside in exposing the benign race. It would 
> also be difficult to assert the invariant, competing objects are functionally 
> equivalent. So, I think no.
> 
> 2. In a static context, the stable value will be inlined (or rather 
> constant-folded). So we are partly already there. For pure instance contexts, 
> I have some ideas about this but it is non-trivial.

> @minborg Just curious, why are you adding holder-in-holder benchmark cases?

I'd like to test the transitive constant folding capabilities.

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

PR Comment: https://git.openjdk.org/jdk/pull/18794#issuecomment-2075119450

Reply via email to