Anoop Sam John created HBASE-14120:
--------------------------------------

             Summary: ByteBufferUtils#compareTo small optimization
                 Key: HBASE-14120
                 URL: https://issues.apache.org/jira/browse/HBASE-14120
             Project: HBase
          Issue Type: Sub-task
            Reporter: Anoop Sam John
            Assignee: Anoop Sam John
             Fix For: 2.0.0


We have it like
{code}
if (UnsafeAccess.isAvailable()) {
  long offset1Adj, offset2Adj;
  Object refObj1 = null, refObj2 = null;
  if (buf1.hasArray()) {
        offset1Adj = o1 + buf1.arrayOffset() + 
UnsafeAccess.BYTE_ARRAY_BASE_OFFSET;
        refObj1 = buf1.array();
  } else {
        offset1Adj = o1 + ((DirectBuffer) buf1).address();
  }
  if (buf2.hasArray()) {
{code}
Instead of hasArray() check we can have isDirect() check and reverse the if 
else block. Because we will be making BB backed cells when it is offheap BB. So 
when code reaches here for comparison, it will be direct BB.

Doing JMH test proves it.
{code}
Benchmark                            Mode  Cnt         Score         Error  
Units
OnHeapVsOffHeapComparer.offheap     thrpt    4  50516432.643 ±  651828.103  
ops/s
OnHeapVsOffHeapComparer.offheapOld  thrpt    4  37696698.093 ± 1121685.293  
ops/s
{code}




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

Reply via email to