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

Lars Hofhansl commented on HBASE-10320:
---------------------------------------

Thanks Stack. I wonder whether the same is true for ArrayLists.
That brings to another thought, the columns list is fixed size and never 
changed once created, so why have an ArrayList at all instead of an Array. Then 
we can use columns.length in the loop and get this optimization. Will try when 
I get some time next.


> Avoid ArrayList.iterator() in tight loops
> -----------------------------------------
>
>                 Key: HBASE-10320
>                 URL: https://issues.apache.org/jira/browse/HBASE-10320
>             Project: HBase
>          Issue Type: Bug
>          Components: Performance
>            Reporter: Lars Hofhansl
>         Attachments: 10320-0.94-v2.txt, 10320-0.94.txt
>
>
> I noticed that in a profiler (sampler) run ScanQueryMatcher.setRow(...) 
> showed up at all.
> In turns out that the expensive part is iterating over the columns in 
> ExcplicitColumnTracker.reset(). I did some microbenchmarks and found that
> {code}
> private ArrayList<X> l;
> ...
> for (int i=0; i<l.size(); i++) {
>    X = l.get(i);
>    ...
> }
> {code}
> Is twice as fast as:
> {code}
> private ArrayList<X> l;
> ...
> for (X : l) {
>    ...
> }
> {code}
> The indexed version asymptotically approaches the iterator version, but even 
> at 1m entries it is still faster.
> In my tight loop scans this provides for a 5% performance improvement overall 
> when the ExcplicitColumnTracker is used.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to