> This is fork off the SizeOf JEP, JDK-8249196. There is already the entry > point in JDK that can use the intrinsic like this: > `Instrumentation.getInstanceSize`. Therefore, we can implement the C1/C2 > intrinsic now, hook it up to `Instrumentation`, and let the tools use that > fast path today. > > With this patch, JOL is able to be close to `deepSizeOf` implementation from > SizeOf JEP. > > Example performance improvements for sizing up a custom linked list: > > Benchmark (size) Mode Cnt Score Error Units > > # Default > LinkedChainBench.linkedChain 1 avgt 5 705.835 ± 8.051 ns/op > LinkedChainBench.linkedChain 10 avgt 5 3148.874 ± 37.856 ns/op > LinkedChainBench.linkedChain 100 avgt 5 28693.256 ± 142.254 ns/op > LinkedChainBench.linkedChain 1000 avgt 5 290161.590 ± 4594.631 ns/op > > # Instrumentation attached, no intrinsics > LinkedChainBench.linkedChain 1 avgt 5 159.659 ± 19.238 ns/op > LinkedChainBench.linkedChain 10 avgt 5 717.659 ± 22.540 ns/op > LinkedChainBench.linkedChain 100 avgt 5 7739.394 ± 111.683 ns/op > LinkedChainBench.linkedChain 1000 avgt 5 80724.238 ± 2887.794 ns/op > > # Instrumentation attached, new intrinsics > LinkedChainBench.linkedChain 1 avgt 5 95.254 ± 0.808 ns/op > LinkedChainBench.linkedChain 10 avgt 5 261.564 ± 8.524 ns/op > LinkedChainBench.linkedChain 100 avgt 5 3367.192 ± 21.128 ns/op > LinkedChainBench.linkedChain 1000 avgt 5 34148.851 ± 373.080 ns/op
Aleksey Shipilev has updated the pull request incrementally with one additional commit since the last revision: Drop parentheses around comparisons ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/650/files - new: https://git.openjdk.java.net/jdk/pull/650/files/1b7290a3..89881e9f Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=650&range=06 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=650&range=05-06 Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod Patch: https://git.openjdk.java.net/jdk/pull/650.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/650/head:pull/650 PR: https://git.openjdk.java.net/jdk/pull/650