RFR: 8202184: Reduce time blocking the ClassSpecializer cache creating SpeciesData

Peter Levart peter.levart at gmail.com
Wed Apr 25 09:07:47 UTC 2018

On 04/25/2018 10:06 AM, Claes Redestad wrote:
> Besides, CHM.computeIfAbsent has a non-synchronizing fast-path for 
> when the key exists,
> lines 1731-1734:
>             else if (fh == h    // check first node without acquiring 
> lock
>                      && ((fk = f.key) == key || (fk != null && 
> key.equals(fk)))
>                      && (fv = f.val) != null)
>                 return fv; 

Sorry, you're (almost) right! I confused it with CHM.compute()...

The almost part is that lock is avoided only when the match is found in 
the 1st linked node of the bucket. If there is a hash collision (very 
unlikely) and the entry is in a 2nd or subsequent node in the list, the 
lock is still used. So there's almost no locks used... And if there's no 
hot contention going on, there's no need for prefacing with .get().

Regards, Peter

More information about the core-libs-dev mailing list