groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul King (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (GROOVY-8391) CLONE - hashCode() generated by @EqualsAndHashCode is inefficient for instances with null fields or properties (port/rework for 2_5_X/2_4_X)
Date Sat, 25 Nov 2017 13:30:01 GMT

     [ https://issues.apache.org/jira/browse/GROOVY-8391?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Paul King updated GROOVY-8391:
------------------------------
    Affects Version/s:     (was: 2.6.0-alpha-2)

> CLONE - hashCode() generated by @EqualsAndHashCode is inefficient for instances with
null fields or properties (port/rework for 2_5_X/2_4_X)
> --------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-8391
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8391
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.4.12, 2.5.0-beta-2
>            Reporter: Marcin Erdmann
>            Assignee: Paul King
>              Labels: performance
>
> 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