groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marcin Erdmann (JIRA)" <j...@apache.org>
Subject [jira] [Created] (GROOVY-8377) hashCode() generated by @EqualsAndHashCode is inefficient for instances with null fields or properties
Date Sun, 12 Nov 2017 10:45:00 GMT
Marcin Erdmann created GROOVY-8377:
--------------------------------------

             Summary: hashCode() generated by @EqualsAndHashCode is inefficient for instances
with null fields or properties
                 Key: GROOVY-8377
                 URL: https://issues.apache.org/jira/browse/GROOVY-8377
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 2.6.0-alpha-2, 2.5.0-beta-2, 2.4.12
            Reporter: Marcin Erdmann


In a project I work on there is a relatively large hash map for which the key type has a {{@EqualsAndHashCode}}
generated {{hashCode()}}. After introducing an additional property to the key type, for which
the value is {{null}} on most instances, I noticed a massive degradation in efficiency of
adds to the aforementioned map.

After some digging around it turns out that the AST generated by that transform performs an
identity check using {{is()}} between the property/field value and {{this}}. In cases where
the property/field value is {{null}} this leads to a {{NullObject.is()}} call, for which,
as far as I understand, no call site caching occurs.

A PR with a jmh benchmark and a very simple fix to follow.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message