[master] RFR: Trim identity-hashcode to 25bit

Roman Kennke rkennke at openjdk.java.net
Mon May 10 18:42:27 UTC 2021


On Mon, 10 May 2021 17:14:39 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> I'd like to trim the identity hashcode to 25 bits to make room in the upper 32bits for the compressed class-pointer.
>> 
>> This could in theory regress performance on workloads that make heavy use of i-hashes, but I could not show this in practice (by specjvm workloads like compiler which uses lots of ihashes).
>> 
>> Next step would be to move the Klass* into the upper 32bit part. (If you look closely, this would be the exact header layout of 32bit JVMs.) And then get rid of the dedicated Klass* field. :-D Eventually I'd make ihash-bits and klass* bits configurable to trade one for the other.
>> 
>> Testing:
>>  - [x] some manual benchmarks
>>  - [x] tier1
>>  - [ ] tier2
>
> src/hotspot/share/oops/markWord.hpp line 45:
> 
>> 43: //  --------
>> 44: //  unused:32 hash:25 -->|  age:4    biased_lock:1 lock:2 (normal object)
>> 45: //  JavaThread*:54 epoch:2  age:4    biased_lock:1 lock:2 (biased object)
> 
> This does not compute. Where did the `unused_gap` go in the second case? Is `epoch` now larger? Or does `JavaThread*` now takes 55 bits?

Epoch and JavaThread in the biased case are already overlaid with hashcode. Hashcode and biased state doesn't happen at the same time. 32+25+4+1+2 == 64.

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

PR: https://git.openjdk.java.net/lilliput/pull/3


More information about the lilliput-dev mailing list