<i18n dev> RFR: 8366178: Implement JEP 526: Lazy Constants (Second Preview)
Per Minborg
pminborg at openjdk.org
Mon Oct 13 11:51:11 UTC 2025
On Sat, 4 Oct 2025 04:13:05 GMT, Chen Liang <liach at openjdk.org> wrote:
>> src/java.base/share/classes/java/util/Optional.java line 74:
>>
>>> 72: * If non-null, the value; if null, indicates no value is present
>>> 73: */
>>> 74: @Stable
>>
>> Shouldn’t this also add a null sentinel to allow the folding of the empty case? Or is that irrelevant because empty would be the terminator of a chain.
>
> Usually a null sentinel is used when null indicates something different. I think maybe to allow folding the empty case, we should probably add a new annotation or a new element-value to indicate this status and properly handle it in C1/C2 (similar to the field trusting in ciField)
I've added two new benchmarks:
private static final LazyConstant<Optional<Integer>> OPTIONAL_42 = LazyConstant.of(() -> Optional.of(42));
private static final LazyConstant<Optional<Integer>> OPTIONAL_42_2 = LazyConstant.of(() -> Optional.of(42));
private static final LazyConstant<Optional<Integer>> OPTIONAL_EMPTY = LazyConstant.of(Optional::empty);
private static final LazyConstant<Optional<Integer>> OPTIONAL_EMPTY2 = LazyConstant.of(Optional::empty);
...
@Benchmark
public int staticOptional42() {
return OPTIONAL_42.get().orElseThrow() + OPTIONAL_42_2.get().orElseThrow();
}
@Benchmark
public boolean staticOptionalEmpty() {
return OPTIONAL_EMPTY.get().isEmpty() ^ OPTIONAL_EMPTY2.get().isEmpty();
}
Which gives:
Benchmark Mode Cnt Score Error Units
StableValueBenchmark.staticOptional42 avgt 10 0.354 ± 0.045 ns/op
Benchmark Mode Cnt Score Error Units
StableValueBenchmark.staticOptionalEmpty avgt 10 0.370 ± 0.030 ns/op
So, both `Optional` variants appears to support constant folding.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/27605#discussion_r2426044826
More information about the i18n-dev
mailing list