On Wed, 27 Aug 2025 19:40:28 GMT, Roger Riggs <[email protected]> wrote:

> As observed in [JDK-8366043](https://bugs.openjdk.org/browse/JDK-8366043) 
> [lworld] (LIFE = Legacy Idiom For Equality) causes performance regressions.
> Updating HashMap and ConcurrentHashMap to use `java.util.Objects.equals` will 
> make it easier to measure performance of options that remove or modify the 
> use of `==`
> 
> Replace constructs like:
> 
> -                        ((k = e.key) == key || (key != null && 
> key.equals(k))))
> with:
> +                        Objects.equals(key, k))
> 
> 
> The changes in ConcurrentHashMap are a bit different due to the use of null 
> as a sentinel.
> 
> The order of arguments to the .equals methods must remain the same to ensure 
> compatibility.

src/java.base/share/classes/java/util/HashMap.java line 2026:

> 2024:                 else if (ph < h)
> 2025:                     p = pr;
> 2026:                 else if (Objects.equals(k, (pk = p.key)))

Stylistic: don't need parentheses around `pk = p.key`

src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java line 
669:

> 667:                     (k = (e = (Map.Entry<?,?>)o).getKey()) != null &&
> 668:                     (v = e.getValue()) != null &&
> 669:                     (Objects.equals(k, key)) &&

`k.equals(key)` should be sufficient here.

src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java line 
682:

> 680:                     K ek;
> 681:                     if (e.hash == h &&
> 682:                         (ek = e.key) != null && Objects.equals(k, ek))

Looking at the code in HashMap, I think you can just use `Objects.equals(k, ek 
= e.key)`, or just `k.equals(ek = e.key)` because `Object::equals` is supposed 
to return false on null.

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1536#discussion_r2305408280
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1536#discussion_r2305407382
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1536#discussion_r2305411815

Reply via email to