On Thu, 19 Jun 2025 11:01:28 GMT, ExE Boss <d...@openjdk.org> wrote: >> Per Minborg has updated the pull request with a new target base due to a >> merge or a rebase. The incremental webrev excludes the unrelated changes >> brought in by the merge/rebase. The pull request contains eight additional >> commits since the last revision: >> >> - Merge branch 'master' into sv-release-supplier2 >> - Fix performance regression >> - Clean up >> - Fix bug >> - Simplify >> - Revert to records >> - Make code more like the old one >> - Add removable underlying functions > > src/java.base/share/classes/jdk/internal/lang/stable/StableSupplier.java line > 46: > >> 44: @Override >> 45: public T get() { >> 46: return delegate.orElseSet(underlyingHolder.underlying(), >> underlyingHolder); > > By avoiding reading from `underlyingHolder` when the `StableValue` is already > set, this can avoid the overhead of a field read from `underlyingHolder`: > Suggestion: > > final Object t = delegate.wrappedContentsAcquire(); > if (t != null) { > return unwrap(t); > } > return delegate.orElseSet(underlyingHolder.underlying(), > underlyingHolder);
Before this proposal: Benchmark Mode Cnt Score Error Units StableSupplierBenchmark.stable avgt 10 1.369 ± 0.019 ns/op StableSupplierBenchmark.staticStable avgt 10 0.343 ± 0.005 ns/op StableSupplierBenchmark.staticSupplier avgt 10 0.389 ± 0.008 ns/op StableSupplierBenchmark.supplier avgt 10 1.739 ± 0.047 ns/op After this proposal: Benchmark Mode Cnt Score Error Units StableSupplierBenchmark.stable avgt 10 1.436 ± 0.120 ns/op StableSupplierBenchmark.staticStable avgt 10 0.352 ± 0.044 ns/op StableSupplierBenchmark.staticSupplier avgt 10 0.346 ± 0.016 ns/op StableSupplierBenchmark.supplier avgt 10 1.588 ± 0.035 ns/op. <-- ! So, it appears to be some gain here. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/25878#discussion_r2156934164