commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jörg Schaible <joerg.schai...@swisspost.com>
Subject Re: [lang] Allocate array of the correct size
Date Tue, 05 May 2015 15:51:56 GMT
Hi Benedikt,

Benedikt Ritter wrote:

> 2015-05-05 14:52 GMT+02:00 Benedikt Ritter <britter@apache.org>:
> 
>> Hello Jörg,
>>
>> 2015-05-05 8:30 GMT+02:00 Jörg Schaible <joerg.schaible@swisspost.com>:
>>
>>> Hi Benedikt,
>>>
>>> britter@apache.org wrote:
>>>
>>> > Repository: commons-lang
>>> > Updated Branches:
>>> >   refs/heads/master 8548b12d8 -> 60b32953a
>>> >
>>> >
>>> > Allocate array of the correct size
>>> >
>>> >
>>> > Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
>>> > Commit:
>>> > http://git-wip-us.apache.org/repos/asf/commons-lang/commit/60b32953
>>> Tree:
>>> > http://git-wip-us.apache.org/repos/asf/commons-lang/tree/60b32953
>>> > Diff:
>>> > http://git-wip-us.apache.org/repos/asf/commons-lang/diff/60b32953
>>> >
>>> > Branch: refs/heads/master
>>> > Commit: 60b32953a968e5623f82a6b27d6c679bc17c48e5
>>> > Parents: 8548b12
>>> > Author: Benedikt Ritter <britter@apache.org>
>>> > Authored: Mon May 4 21:26:07 2015 +0200
>>> > Committer: Benedikt Ritter
>>> > <britter@apache.org> Committed: Mon May 4
>>> > 21:26:07 2015 +0200
>>> >
>>> > ----------------------------------------------------------------------
>>> >  .../apache/commons/lang3/builder/ReflectionToStringBuilder.java    |
>>> >  2
>>> +-
>>> >  1 file changed, 1 insertion(+), 1 deletion(-)
>>> > ----------------------------------------------------------------------
>>> >
>>> >
>>> >
>>> http://git-wip-us.apache.org/repos/asf/commons-lang/blob/60b32953/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
>>> > ----------------------------------------------------------------------
>>> > diff --git
>>> >
>>>
>>> 
a/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
>>> >
>>>
>>> 
b/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
>>> > index 5904469..7a78170 100644 ---
>>> >
>>>
>>> 
a/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
>>> > +++
>>> >
>>>
>>> 
b/src/main/java/org/apache/commons/lang3/builder/ReflectionToStringBuilder.java
>>> > @@ -333,7 +333,7 @@ public class ReflectionToStringBuilder extends
>>> > ToStringBuilder {
>>> >                  list.add(e.toString());
>>> >              }
>>> >          }
>>> > -        return list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
>>> > +        return list.toArray(new String[list.size()]);
>>> >      }
>>>
>>> What's the benefit of this? Where's the difference by letting
>>> List.toArray()
>>> allocate the appropriate array compared to do it on your own?
>>> ArrayUtils.EMPTY_STRING is a constant after all, so there's no
>>> additional allocation.
>>>
>>
>> I changed this because my IDE complained about that line of code:
>>
>> "Call to 'toArray' with zero-length array argument
>> 'ArrayUtils.EMPTY_STRING_ARRAY'
>>
>> Reports any call to 'toArray' on an object or type or subtype of
>> java.util.Collection with a zero-length argument. When passing an array
>> of too small size, the toArray() method has to construct a new array of
>> the correct size using reflection. This has significantly worse
>> performance than passing in an array of at least the size of the
>> collection itself."
>>
>> To be honest, I did not do any performance benchmarks to make sure this
>> is really true.
>>
> 
> In any case, the commit message should have been more explanatory. Sorry
> about that.

Well, that warning is somewhat stupid, if you're using a constant for the 
zero length array. The "worse performance" only occurs if you provide a new 
array instance that is too small.

Cheers,
Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message