[15] RFR (xs) 8046362 IdentityHashMap.hash comments should be clarified
David Holmes
david.holmes at oracle.com
Fri Feb 7 22:47:16 UTC 2020
Hi Martin,
On 8/02/2020 3:10 am, Martin Buchholz wrote:
> I explored System.identityHashCode (see below).
System.identityHashCode is a VM call that is potentially very expensive.
In the worst-case it triggers monitor inflation.
Cheers,
David
> They appear to be high quality, pre-mixed ints (not just addresses).
> I suggest that IdentityHashMap simply trust System.identityHashCode.
> I'm surprised at any attempt to defend against high bits being zero. I'm
> far more worried about low bits, as would happen if identityHashCode just
> returned the bottom 32 bits of an address, perhaps shifted insufficiently.
> But this is 2020. Trust the VM! If the VM is broken, fix it!
> ---
> import java.lang.reflect.Constructor;
>
> public class IdentityHashCodes {
> static class F1 { int x; }
> static class F2 { int x; int y; }
>
> static void printHashCodes(Class<?> clazz) throws Throwable {
> System.out.printf("--- %s ---%n", clazz.getSimpleName());
> Constructor<?> c = clazz.getDeclaredConstructor();
> for (int i = 30; i--> 0; )
> System.out.printf("%x%n",
> System.identityHashCode(c.newInstance()));
> }
>
> public static void main(String[] args) throws Throwable {
> printHashCodes(Object.class);
> printHashCodes(F1.class);
> printHashCodes(F2.class);
> }
> }
>
> On Fri, Feb 7, 2020 at 6:03 AM Doug Lea <dl at cs.oswego.edu> wrote:
>
>>
>>> I don't get what hash() is doing with the low bits. Maybe we want
>>> something like mix32.
>>
>> It is mainly spreading them upwards because some (varying over time) top
>> bits of identityHashCode are always 0.
>>
>> -Doug
>>
>>
>>>
>>> On Thu, Feb 6, 2020 at 1:01 AM Andrew Haley <aph at redhat.com
>>> <mailto:aph at redhat.com>> wrote:
>>>
>>> On 1/28/20 11:41 PM, Stuart Marks wrote:
>>>
>>> > As an aside, I don't know whether the linear-probing (open
>>> > addressed) arrangement of IdentityHashMap is in fact faster than
>> the
>>> > separate chaining approach of HashMap. Perhaps investigating that
>>> > could be a side project for someone.
>>>
>>> It always has been better in the past, but maybe if the collision
>> rate
>>> is kept low it won't matter much. Deletion is horrible, though.
>>>
>>> > Changeset appended below.
>>> >
>>> > Bug: https://bugs.openjdk.java.net/browse/JDK-8046362
>>>
>>> OK, thanks.
>>>
>>> --
>>> Andrew Haley (he/him)
>>> Java Platform Lead Engineer
>>> Red Hat UK Ltd. <https://www.redhat.com>
>>> https://keybase.io/andrewhaley
>>> EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671
>>>
>>
>>
>>
More information about the core-libs-dev
mailing list