You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/06/05 15:18:59 UTC

[jira] [Commented] (LANG-1229) Performance regression due to cyclic hashCode guard

    [ https://issues.apache.org/jira/browse/LANG-1229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15315913#comment-15315913 ] 

ASF GitHub Bot commented on LANG-1229:
--------------------------------------

Github user PascalSchumacher commented on the issue:

    https://github.com/apache/commons-lang/pull/142
  
    To keep the code clean the pull request should also undo the other additions to `HashCodeBuilderTest` done with https://github.com/apache/commons-lang/commit/b5749b4f54b30c0c2050e456c12cfcf516434f13


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