Hi all,

The main ideas of this patch are to highlight and enforce the invariant we 
enforce when it comes to value objects' identity hash code. 

The original JBS issues addresses the following points, which have been 
addressed to various extents:

1. Adding assertions to the CAS-setting of the hash in the markWord. This is 
vital to enforce the invariant and was added.
2. Breaking the loop if the CAS results in a conflict. Putting the identity 
hash in the markWord is an optimization, so one could break out of the loop 
whenever. With the assertion, there's a good confidence that CAS will 
eventually succeed, namely once other threads stop poking at the markWord bits. 
**If there is demand, I can add a fixed upper bound.**
3. SSA-ing the hash variable. Done.
4. Possibly introducing a markWord::has_hash to improve legibility. I did not 
do this as it would yield multiple `obj->mark()` calls in the fast path and the 
current form is (in my opinion) sufficiently legible. 

Testing: tiers 1-3 on Linux (x64, AArch64), macOS (x64, AArch64), Windows (x64).

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

Commit messages:
 - Returned the wrong thing.
 - Undo several mistakes in logic.
 - Fix lot's of broken semantics.
 - Rework identity hash code CAS.

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

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

Reply via email to