Since [JDK-8247299](https://bugs.openjdk.org/browse/JDK-8247299), value objects 
no longer use `markWord::always_locked_pattern` (see description of 
[JDK-8247298](https://bugs.openjdk.org/browse/JDK-8247298) for more details). 
Therefore, the limitations around storing the hash code in the mark word that 
are mentioned in [JDK-8244975](https://bugs.openjdk.org/browse/JDK-8244975) no 
longer exist. Let's enable this optimization.

Running `System.identityHashCode(obj)` in a loop and passing various primitive 
boxes leads to a **17-18x speedup** on my machine. I'm also seeing a **7% 
improvement** in the score of the SPECjvm2008 serial benchmark but we are still 
a bit behind baseline without `--enable-preview`. More improvements to come.

It's worth noting that value objects will lose their buffer object when stored 
in a flat container or sometimes when being scalarized 
([JDK-8372268](https://bugs.openjdk.org/browse/JDK-8372268) will improve this). 
The hash then needs to be re-computed, which is expensive.

I'm working on ways to further improve this, see 
[JDK-8252185](https://bugs.openjdk.org/browse/JDK-8252185).

Thanks,
Tobias

-------------

Commit messages:
 - Use handle
 - 8376171: [lworld] Enable storing the hash code in the mark word of value 
objects

Changes: https://git.openjdk.org/valhalla/pull/1954/files
  Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=1954&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8376171
  Stats: 28 lines in 1 file changed: 13 ins; 0 del; 15 mod
  Patch: https://git.openjdk.org/valhalla/pull/1954.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/1954/head:pull/1954

PR: https://git.openjdk.org/valhalla/pull/1954

Reply via email to