On Fri, 17 Oct 2025 09:25:01 GMT, Per Minborg <[email protected]> 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.
>
> Per Minborg has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Update javadocs
src/java.base/share/classes/java/lang/LazyConstant.java line 168:
> 166: * of that lazy constant and instead directly use any constant that it
> has previously
> 167: * observed. We call this optimization <em>constant folding</em>. This
> is only possible if
> 168: * the reference to the lazy constant is a VM constant (e.g. in cases
> where
Not sure talking about VM constant is good. We could alternatively say:
"if the lazy constant is stored in a static final field, either directly, or
indirectly, via one or more trusted fields (i.e. any combination...)"
src/java.base/share/classes/java/lang/LazyConstant.java line 179:
> 177: * must be <em>non-null</em>, or a {@link NullPointerException} will be
> thrown.
> 178: *
> 179: * @apiNote Once a lazy constant is initialized with an object, the
> object cannot ever be
Once a lazy constant is initialized, its contents can never be removed...
src/java.base/share/classes/java/lang/LazyConstant.java line 182:
> 180: * removed. This can be a source of an unintended memory leak.
> More specifically,
> 181: * a lazy constant {@linkplain java.lang.ref##reachability
> strongly references}
> 182: * the object it was initialized with. Hence, a lazy constant
> will hold
s/the object it was initialized with/its contents (here and below)
src/java.base/share/classes/java/lang/LazyConstant.java line 186:
> 184: * is collected (if ever).
> 185: * <p>
> 186: * A {@code LazyConstant} that has a type parameter {@code T}
> that is an
"A lazy constant whose contents is an array will not optimize access to the the
elements of such array. Instead, ..."
src/java.base/share/classes/java/lang/LazyConstant.java line 191:
> 189: * Instead, a {@linkplain List#ofLazy(int, IntFunction) lazy
> list} of
> 190: * arbitrary depth can be used, which provides constant
> components.
> 191: * More generally, a lazy constant can hold other lazy
> constants of
More generally... you said that in the composition section?
src/java.base/share/classes/java/lang/LazyConstant.java line 233:
> 231:
> 232: /**
> 233: * {@return the initialized contents. If not initialized, first
> computes and
"initialized contents" is not a term you have defined in this javadoc. `get`
returns the contents of this lazy constant. If the lazy constant is not
initialized...
src/java.base/share/classes/java/lang/LazyConstant.java line 267:
> 265: */
> 266: @Override
> 267: String toString();
I think it might be worth also defining a javadoc for equals/hashCode, to say
explicitly that they will also not trigger initialization
src/java.base/share/classes/java/lang/LazyConstant.java line 284:
> 282: * directly.
> 283: *
> 284: * @param computingFunction in the form of a Supplier to be used to
> compute
Suggestion:
* @param computingFunction a {@code Supplier} used to initialize
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439138229
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439141653
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439144255
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439156012
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439150170
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439161143
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439169909
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2439174349