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

Alexander van de Rovaart updated LANG-1643:
-------------------------------------------
    Description: 
In the constructor the EqualsBuilder the variabele {{bypassReflectionClasses}} 
is initialized with an {{new ArrayList()}} and immidiately after that a vaue is 
added. This will result in an ArrayList.grow() because the contructor of 
ArrayList will initialize is with a zero length array. See attached screenshot 
for a stacktrace from a flight recording.

My suggestion would be to initialize the arraylist with a length of 1 (or the 
default of 10 that is used in {{java.util.ArrayList}} when it is initially 
grown on the first add.) So the calls to ArrayList.grow and 
ArrayList.newCapacity or Arrays.copyOf in another run become obsolete

 

So the code sample of the constructor would be:
{code:java}
    public EqualsBuilder() {
        // set up default classes to bypass reflection for
        bypassReflectionClasses = new ArrayList<>(1);
        bypassReflectionClasses.add(String.class); //hashCode field being lazy 
but not transient
    }
{code}

!image-2021-02-04-11-45-47-437.png!
 !screenshot-1.png! 

  was:
In the constructor the EqualsBuilder the variabele {{bypassReflectionClasses}} 
is initialized with an {{new ArrayList()}} and immidiately after that a vaue is 
added. This will result in an ArrayList.grow() because the contructor of 
ArrayList will initialize is with a zero length array. See attached screenshot 
for a stacktrace from a flight recording.

My suggestion would be to initialize the arraylist with a length of 1 or the 
default of 10 that is used in java.util.ArrayList when it is initially grown on 
the first add.

 

So the code sample of the constructor would be:
{code:java}
    public EqualsBuilder() {
        // set up default classes to bypass reflection for
        bypassReflectionClasses = new ArrayList<>(1);
        bypassReflectionClasses.add(String.class); //hashCode field being lazy 
but not transient
    }
{code}

!image-2021-02-04-11-45-47-437.png!


> Initialize Arraylist in EqualsBuilder with size 1
> -------------------------------------------------
>
>                 Key: LANG-1643
>                 URL: https://issues.apache.org/jira/browse/LANG-1643
>             Project: Commons Lang
>          Issue Type: Improvement
>          Components: lang.builder.*
>         Environment: {code}
> :~$ java -version
> openjdk version "11.0.9.1" 2020-11-04
> OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
> OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, 
> sharing)
> :~$ uname -a
> Linux ubuntu 5.8.0-41-generic #46~20.04.1-Ubuntu SMP Mon Jan 18 17:52:23 UTC 
> 2021 x86_64 x86_64 x86_64 GNU/Linux
> Apache commons lang3 version 3.11
> {code}
>            Reporter: Alexander van de Rovaart
>            Priority: Minor
>              Labels: EqualsBuilder, improvement
>         Attachments: image-2021-02-04-11-45-47-437.png, screenshot-1.png
>
>
> In the constructor the EqualsBuilder the variabele 
> {{bypassReflectionClasses}} is initialized with an {{new ArrayList()}} and 
> immidiately after that a vaue is added. This will result in an 
> ArrayList.grow() because the contructor of ArrayList will initialize is with 
> a zero length array. See attached screenshot for a stacktrace from a flight 
> recording.
> My suggestion would be to initialize the arraylist with a length of 1 (or the 
> default of 10 that is used in {{java.util.ArrayList}} when it is initially 
> grown on the first add.) So the calls to ArrayList.grow and 
> ArrayList.newCapacity or Arrays.copyOf in another run become obsolete
>  
> So the code sample of the constructor would be:
> {code:java}
>     public EqualsBuilder() {
>         // set up default classes to bypass reflection for
>         bypassReflectionClasses = new ArrayList<>(1);
>         bypassReflectionClasses.add(String.class); //hashCode field being 
> lazy but not transient
>     }
> {code}
> !image-2021-02-04-11-45-47-437.png!
>  !screenshot-1.png! 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to