[
https://issues.apache.org/jira/browse/HBASE-16278?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15391480#comment-15391480
]
Hiroshi Ikeda commented on HBASE-16278:
---------------------------------------
Creating an object itself are quite light-weight and that has the almost same
cost as synchronization without contention, according to my old Java book. If
you haven't worry about how many times we access volatile fields nor CAS, it
would not make sense to just think about creating small objects (and concurrent
maps will use CAS many times in order to avoid block).
However, I agree that using raw byte arrays is a bad design because of their
mutability, in general. But it seems too late (and we cannot help from the
beginning since Hadoop have adopted that in its API) and there too many usages
of raw bytes. From viewpoints of both performance and object-oriented
programing, I think it would not pay to do something about that.
I didn't know the master just supports Java8+, but I think a developer who want
to use the new method can fix the code. After all, maps using mutable keys
cannot be used for general purposes.
> Use ConcurrentHashMap instead of ConcurrentSkipListMap if possible
> ------------------------------------------------------------------
>
> Key: HBASE-16278
> URL: https://issues.apache.org/jira/browse/HBASE-16278
> Project: HBase
> Issue Type: Improvement
> Reporter: Duo Zhang
> Attachments: ConcurrentHashByteArrayMap.java
>
>
> SSD and 10G network make our system CPU bound again, so the speed of memory
> operation only code becomes more and more important.
> In HBase, if want to use byte[] as a map key, then we will always use CSLM
> even if we do not need the map to be ordered. I know that this could save one
> object allocation since we can not use byte[] directly as CHM's key. But we
> all know that CHM is faster than CSLM, so I wonder if it worth to use CSLM
> instead of CHM only because one extra object allocation.
> Then I wrote a simple jmh micro benchmark to test the performance of CHM and
> CSLM. The code could be found here
> https://github.com/Apache9/microbench
> It turns out that CHM is still much faster than CSLM with one extra object
> allocation.
> So I think we should always use CHM if we do not need the keys to be sorted.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)