RFR: 8319773: Avoid inflating monitors when installing hash codes for LM_LIGHTWEIGHT [v4]

Daniel D. Daugherty dcubed at openjdk.org
Thu Nov 16 19:11:55 UTC 2023


On Thu, 16 Nov 2023 10:04:11 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:

>> LM_LIGHTWEIGHT only uses the lock bits for its locking. This leaves the hashCode bits free when a monitor is not inflated. So instead of inflating when installing the hashCode on a fast locked object it can simply use the hashCode bits in the markWord.
>> 
>> The mark word transitions Unlocked (0b01) <=> Locked (0b00) are done by retrying the CAS if it fails due to non-lock bit changes. 
>> The mark word transitions Monitor (0b10) <=> Locked/Unlocked (0b0X) are the same as before, inflation already handles hash codes. This change does not interact with the mark word if it is in a Monitor (0b10) state, so the strong CAS which is used for deflation are still valid, and will not fail to any other reason than the cooperative race to help transition the mark word during deflation.
>> 
>> This is dependent on JDK-8319778 simply because JDK-8319797 is dependent on both this and JDK-8319778.
>
> Axel Boldt-Christmas has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Move is_lock_owned closer to its only use

test/hotspot/jtreg/runtime/whitebox/TestWBDeflateIdleMonitors.java line 69:

> 67:                 // HotSpot implementation detail: asking for the hash code
> 68:                 // when the object is locked causes monitor inflation.
> 69:                 if (obj.hashCode() == 0xBAD) System.out.println("!");

Why was this deleted from the test? `get_next_hash()` can still
return this value so it's useful to know if a bad hash code made it
out this far...

Update: I see why it was deleted now. hashCode() while locked
no longer forces inflation. We're gonna have to find all the places
in various tests that assume that works. That's going to be fun...

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16603#discussion_r1396207772


More information about the hotspot-dev mailing list