Philippe Marschall created LANG-1229:
----------------------------------------

             Summary: Performance regression due to cyclic hashCode guard
                 Key: LANG-1229
                 URL: https://issues.apache.org/jira/browse/LANG-1229
             Project: Commons Lang
          Issue Type: Bug
          Components: lang.builder.*
    Affects Versions: 3.5
            Reporter: Philippe Marschall


We observed a severe performance regression in HashCodeBuilder in 3.5 trunk 
compared to 3.4 release. We get about 20% of the throughput in 3.5 trunk for 
common cases compared to 3.4 release. Previously there was no noticeable 
overhead of using HashCodeBuilder. Investigating we found the performance 
degradation was caused by the fix for LANG-456. It causes the method to be too 
large to be inlined and escape analysis to fail (see LANG-1218 for a related 
discussion).

We currently do not see a way to keep the 3.4 performance and support cyclic 
graphs. The append methods have not supported cycles for so long we feel it's 
de facto part of the contract by now. Since neither the JDK nor the Guava 
hashCode helper methods support cyclic graphs we don't believe this is an 
unreasonable assumption. In addition EqualsBuilder#append(Object,Object) 
doesn't support cycles.

If supporting cycles is a requirement we propose the introduction of new 
#appendRecursive (or named differently) methods to both HashCodeBuilder and 
EqualsBuilder that add cycle guards. If that is an acceptable compromise we 
would be willing to provide patches.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to