> This patch implements lazy initialization for VarHandle working on static > fields. It has a good initial call performance. > > We introduce a new internal API, `target()` to unpack a lazy VarHandle in VH > implementation methods. If called via MethodHandle, a barrier is added in the > MethodHandle instead. > > The new test ensures the correctness of Lazy VH for both direct and indirect > invocation; the performance of MethodHandle version of lazy VH is not yet > tested. > > > Benchmark Mode Cnt Score > Error Units > LazyStaticColdStart.methodHandleCreateEager ss 10 41.490 ± > 12.331 us/op > LazyStaticColdStart.methodHandleCreateLazy ss 10 21.810 ± > 16.964 us/op > LazyStaticColdStart.methodHandleInitializeCallEager ss 10 57.860 ± > 13.738 us/op > LazyStaticColdStart.methodHandleInitializeCallLazy ss 10 93.300 ± > 18.858 us/op > LazyStaticColdStart.varHandleCreateEager ss 10 39.860 ± > 9.362 us/op > LazyStaticColdStart.varHandleCreateLazy ss 10 17.630 ± > 1.111 us/op > LazyStaticColdStart.varHandleInitializeCallEager ss 10 123.170 ± > 62.468 us/op > LazyStaticColdStart.varHandleInitializeCallLazy ss 10 105.390 ± > 41.815 us/op
Chen Liang has updated the pull request incrementally with one additional commit since the last revision: Mandy suggestions Co-authored-by: Mandy Chung <mandy.ch...@oracle.com> ------------- Changes: - all: https://git.openjdk.org/jdk/pull/13821/files - new: https://git.openjdk.org/jdk/pull/13821/files/3c5d380b..b079fee5 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=13821&range=17 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13821&range=16-17 Stats: 2 lines in 2 files changed: 0 ins; 0 del; 2 mod Patch: https://git.openjdk.org/jdk/pull/13821.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/13821/head:pull/13821 PR: https://git.openjdk.org/jdk/pull/13821