On Wed, 27 Aug 2025 22:18:54 GMT, Chen Liang <[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`

Stylistically, it calls attention to the assignment in the middle of an 
expression.

> 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.

Maintaining consistency with continuation of the return value.

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1536#discussion_r2307390334
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/1536#discussion_r2307392520

Reply via email to