<i18n dev> RFR: 8366178: Implement JEP 526: Lazy Constants (Second Preview)

Per Minborg pminborg at openjdk.org
Mon Oct 13 11:51:05 UTC 2025


On Thu, 2 Oct 2025 10:51:08 GMT, Per Minborg <pminborg at openjdk.org> wrote:

> Implement JEP 526: Lazy Constants (Second Preview)
> 
> The lazy list/map implementations are broken out from `ImmutableCollections` to a separate class.
> 
> The old benchmarks are not moved/renamed to allow comparison with previous releases.
> 
> `java.util.Optional` is updated so that its field is annotated with `@Stable`.  This is to allow `Optional` instances to be held in lazy constants and still provide constant folding.

> I’m gonna miss **Stable Values**, as it has some use cases which aren’t served by **Lazy Constants**, and on which I depend on in some of my code, so I’m stuck with using regular non‑`final` fields.
> 
> Also, in the [JEP 526](https://openjdk.org/jeps/526) table under “[Flexible initialization with lazy constants](https://openjdk.org/jeps/526#Flexible-initialization-with-lazy-constants)”:
> 
> > Update count
> > Update location
> > Constant folding?
> > Concurrent updates?
> > 
> > 
> > 
> > 
> > `final` field
> > 1
> > Constructor or static initializer
> > Yes
> > No
> > 
> > 
> > `LazyConstant`
> > [0, 1]
> > Anywhere
> > Yes, after initialization
> > Yes, by winner
> > 
> > 
> > Non-`final` field
> > [0, ∞)
> > Anywhere
> > No
> > Yes
> 
> The “Update location” of `LazyConstant` shouldn’t be “Anywhere”, as that was only accurate for `StableValue`, but not for `LazyConstant`, which is updated by calling the passed `Supplier`.
> 
> Similarly, concurrent updates are prevented for `LazyConstant`s by using `synchronized (this)`.

I've updated the JEP. Thanks for pointing out this. Let me know what you think about the new text.

We are exploring better ways to provide low-level, imperative, lazy constant/stable value fields. This work will be done outside the current JEP.

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

PR Comment: https://git.openjdk.org/jdk/pull/27605#issuecomment-3396693041
PR Comment: https://git.openjdk.org/jdk/pull/27605#issuecomment-3397160926


More information about the i18n-dev mailing list