[ https://issues.apache.org/jira/browse/HBASE-10320?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lars Hofhansl updated HBASE-10320: ---------------------------------- Attachment: 10320-0.94.txt Simple patch for 0.94. The {code} - private final List<ColumnCount> columns; + private final ArrayList<ColumnCount> columns; {code} is not needed, but it makes it explicit that we're addressing this list via random access. > 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.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 than: > {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)