lizhanhui opened a new issue #2614:
URL: https://github.com/apache/rocketmq/issues/2614


   This is an improvement issue.
   
   When we deserialize network data back to RemotingCommand, we always 
array-copy the body part.
   
   ```java
    public static RemotingCommand decode(final ByteBuffer byteBuffer) {
           int length = byteBuffer.limit();
           int oriHeaderLen = byteBuffer.getInt();
           int headerLength = getHeaderLength(oriHeaderLen);
   
           byte[] headerData = new byte[headerLength];
           byteBuffer.get(headerData);
   
           RemotingCommand cmd = headerDecode(headerData, 
getProtocolType(oriHeaderLen));
   
           int bodyLength = length - 4 - headerLength;
           byte[] bodyData = null;
           if (bodyLength > 0) {
               bodyData = new byte[bodyLength];
               byteBuffer.get(bodyData);
           }
           cmd.body = bodyData;
   
           return cmd;
       }
   ```
   
   For messages with a large body, this brings in significant overhead.  
   
   Instead of immediately copying data from direct ByteBuf to heap array, we 
should keep referencing the sliced frame and release it after use.
   
   This case holds valid for many request code, message sending, pull 
message(for the client)...  
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to