You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Yutong Xiao (Jira)" <ji...@apache.org> on 2021/12/23 05:23:00 UTC

[jira] [Resolved] (HBASE-26604) Replace new allocation with ThreadLocal in CellBlockBuilder to reduce GC

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

Yutong Xiao resolved HBASE-26604.
---------------------------------
    Resolution: Won't Fix

The threadlocal has a potential sync critic. Won't do this then.

> Replace new allocation with ThreadLocal in CellBlockBuilder to reduce GC
> ------------------------------------------------------------------------
>
>                 Key: HBASE-26604
>                 URL: https://issues.apache.org/jira/browse/HBASE-26604
>             Project: HBase
>          Issue Type: Task
>            Reporter: Yutong Xiao
>            Assignee: Yutong Xiao
>            Priority: Minor
>
> In CellBlockBuilder decompress method, we currently allocate a new ByteBufferOutputStream object each invoke. 
> {code:java}
> try {
>       // TODO: This is ugly. The buffer will be resized on us if we guess wrong.
>       //TODO: reuse buffers.
>       bbos = new ByteBufferOutputStream(osInitialSize);
>       IOUtils.copy(cis, bbos);
>       bbos.close();
>       return bbos.getByteBuffer();
>      } finally {
>       CodecPool.returnDecompressor(poolDecompressor);
>     }
> {code}
> We can use a ThreadLocal variable to reuse the buffer in each Thread. As:
> {code:java}
> try {
>       // TODO: This is ugly. The buffer will be resized on us if we guess wrong.
>       if (this.decompressBuff.get() == null) {
>         this.decompressBuff.set(new ByteBufferOutputStream(osInitialSize));
>       }
>       ByteBufferOutputStream localBbos = this.decompressBuff.get();
>       localBbos.clear();
>       IOUtils.copy(cis, localBbos);
>       return localBbos.getByteBuffer();
>     } finally {
>       CodecPool.returnDecompressor(poolDecompressor);
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)