[ https://issues.apache.org/jira/browse/HBASE-14490?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14908577#comment-14908577 ]
Hiroshi Ikeda commented on HBASE-14490: --------------------------------------- {code} private void process() throws IOException, InterruptedException { data.flip(); (...skip...) if (useSasl) { saslReadAndProcess(data.array()); } else { processOneRpc(data.array()); } {code} {{data.array()}} just exposes its backed byte array. ({{data.flip()}} at that position is meaningless at all.) That means, the instance variable {{data}} should be a non-direct buffer which always has the same length of received data, or you should rewrite {{saslReadAndProcess}}/{{processOneRpc}} methods to accept a byte buffer instead of a byte array. BTW, about generational GC, it is better to distinguish between objects to drop immediately and objects to keep and reuse for ever (or for as long as possible). It is said that creating objects in heap is not so expensive, and keeping objects halfway has the opposite effect. > [RpcServer] reuse request read buffer > ------------------------------------- > > Key: HBASE-14490 > URL: https://issues.apache.org/jira/browse/HBASE-14490 > Project: HBase > Issue Type: Improvement > Components: IPC/RPC > Affects Versions: 2.0.0 > Reporter: Zephyr Guo > Assignee: Zephyr Guo > Priority: Minor > Attachments: HBASE-14490-v1.patch, HBASE-14490-v2.patch > > > Reuse buffer to read request.It's not necessary free data's buffer for each > RPC.It maybe can cause memory fragmentation.Allocate buffer also has some > cost. -- This message was sent by Atlassian JIRA (v6.3.4#6332)