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

Duo Zhang edited comment on HBASE-16648 at 9/20/16 6:20 AM:
------------------------------------------------------------

https://github.com/Apache9/microbench/tree/master/src/main/java/com/xiaomi/infra/microbench/compute

There is no contention for the first run, and may have some contentions for the 
second 10 threads run.
{noformat}
./bin/run.sh -f 1 .*IATest.*

Benchmark      Mode  Cnt     Score    Error  Units
CIATest.test  thrpt   20   867.720 ±  0.233  ops/s
PIATest.test  thrpt   20  1796.693 ± 39.908  ops/s

./bin/run.sh -f 1 -t 10 .*IATest.*
Benchmark      Mode  Cnt      Score    Error  Units
CIATest.test  thrpt   20   3452.054 ± 44.537  ops/s
PIATest.test  thrpt   20  12101.279 ±  7.215  ops/s
{noformat}

The putIfAbsent version of computeIfAbsent is much faster. So I think we should 
use the computeIfAbsent in ConcurrentMap instead of ConcurrentHashMap as for us 
the creation is usually cheap.

And in fact, it does not recommend to do a heavy operation in the 
mappingFunction of computeIfAbsent.. Then I do not see the necessity of 
reimplementing this method in ConcurrentHashMap...


was (Author: apache9):
https://github.com/Apache9/microbench/tree/master/src/main/java/com/xiaomi/infra/microbench/compute

{noformat}
./bin/run.sh -f 1 .*IATest.*

Benchmark      Mode  Cnt     Score    Error  Units
CIATest.test  thrpt   20   867.720 ±  0.233  ops/s
PIATest.test  thrpt   20  1796.693 ± 39.908  ops/s

./bin/run.sh -f 1 -t 10 .*IATest.*
Benchmark      Mode  Cnt      Score    Error  Units
CIATest.test  thrpt   20   3452.054 ± 44.537  ops/s
PIATest.test  thrpt   20  12101.279 ±  7.215  ops/s
{noformat}

The putIfAbsent version of computeIfAbsent is much faster. So I think we should 
use the computeIfAbsent in ConcurrentMap instead of ConcurrentHashMap as for us 
the creation is usually cheap.

And in fact, it does not recommend to do a heavy operation in the 
mappingFunction of computeIfAbsent.. Then I do not see the necessity of 
reimplementing this method in ConcurrentHashMap...

> [JDK8] Use computeIfAbsent instead of get and putIfAbsent
> ---------------------------------------------------------
>
>                 Key: HBASE-16648
>                 URL: https://issues.apache.org/jira/browse/HBASE-16648
>             Project: HBase
>          Issue Type: Sub-task
>          Components: Performance
>    Affects Versions: 2.0.0
>            Reporter: Duo Zhang
>            Assignee: Duo Zhang
>             Fix For: 2.0.0
>
>         Attachments: HBASE-16648-v1.patch, HBASE-16648-v2.patch, 
> HBASE-16648.patch
>
>




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to