You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2026/06/04 22:08:00 UTC

[jira] [Updated] (HDDS-15485) Avoid ByteBuffer.wrap on ChunkBuffer.put(byte[]) path

     [ https://issues.apache.org/jira/browse/HDDS-15485?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

ASF GitHub Bot updated HDDS-15485:
----------------------------------
    Labels: pull-request-available  (was: )

> Avoid ByteBuffer.wrap on ChunkBuffer.put(byte[]) path
> -----------------------------------------------------
>
>                 Key: HDDS-15485
>                 URL: https://issues.apache.org/jira/browse/HDDS-15485
>             Project: Apache Ozone
>          Issue Type: Bug
>            Reporter: Andrey Yarovoy
>            Assignee: Andrey Yarovoy
>            Priority: Major
>              Labels: pull-request-available
>
> The default on {{ChunkBuffer}} is:
>  
> {code:java}
> default ChunkBuffer put(byte[] b,int offset,int length) {
>     return put(ByteBuffer.wrap(b, offset, length));   
> }
>  
> {code}
> So every {{{}put(byte[], offset, length){}}}:
>  # Allocates a new {{ByteBuffer}} view ({{{}HeapByteBuffer{}}} over the same backing array).
>  # Dispatches to {{put(ByteBuffer)}}, which for list/incremental buffers runs a segment loop that adjusts the wrapper’s position/limit and copies via {{{}ByteBuffer.put(ByteBuffer){}}}.
> On the client write path, {{BlockOutputStream.write(byte[], …)}} calls {{currentBuffer.put(b, off, writeLen)}} once per slice that fits in the current chunk buffer. Large writes can do that many times per {{write()}} call.
>  
> {{wrap}} itself is “cheap” (no array copy), but per call it still pays object allocation + dispatch into the {{ByteBuffer}} put path. On a hot path called for every slice of every {{{}write(byte[]){}}}, that cost is measurable under load.
>  
> the fix would be micro-optimization, but should reduce memory allocations on hot path and reduce number of objects for garbage collection.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org