[ https://issues.apache.org/jira/browse/LANG-1229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15284932#comment-15284932 ]
Philippe Marschall commented on LANG-1229: ------------------------------------------ A potential patch https://github.com/apache/commons-lang/pull/142 > 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)