[lworld] RFR: 8376171: [lworld] Enable storing the hash code in the mark word of value objects
Tobias Hartmann
thartmann at openjdk.org
Fri Jan 23 12:38:15 UTC 2026
On Fri, 23 Jan 2026 10:20:37 GMT, Tobias Hartmann <thartmann at openjdk.org> wrote:
> 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
Thanks for taking a look at this Marc!
> A question nevertheless: I see that now we have & markWord::hash_mask, so I take that this might change the hash (if result.get_int() highest bit is 1, so negative) to make it fit on 31 bits?
Yes, we only have 31 bits in the mark word reserved for the hash code:
https://github.com/openjdk/valhalla/blob/258bd5840bb7b029b9877155c53b6b1122b0e9dc/src/hotspot/share/oops/markWord.hpp#L52-L55
Existing code for identity objects already does the same truncation.
-------------
PR Comment: https://git.openjdk.org/valhalla/pull/1954#issuecomment-3790043174
More information about the valhalla-dev
mailing list